php对接中通SDK问题
记一次对接中通接口遇到的问题。
中通SDK是4年前的了,就这他们技术人员说能拉取的都是最新的,囧。
1.修改ZopHttpUtil.php中的请求方式
public function post($url, $headers, $querystring)//$timeout
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);//设置链接
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);//设置HTTP头
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
//curl_setopt($ch, CURLOPT_TIMEOUT_MS, $timeout);//无用,注释了
curl_setopt($ch, CURLOPT_POSTFIELDS, $querystring);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //强制协议为1.0
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); //强制使用IPV4协议解析域名
$response = curl_exec($ch);
if (curl_errno($ch)) {
// 输出错误信息
echo 'cURL Error: ' . curl_error($ch);
}
return $response;
}
2.修改ZopClient.php
46,57行,将调用post请求方法的最后一个参数去掉
return $this->httpClient->post($url, $headers, http_build_query($fixedParams));//, 2000 46行
return $this->httpClient->post($url, $headers, $body);//, 2000 57行
PS:不想用他们的SDK的话,我这里自己写了一个生成中通签名的方法,需要的话可以自己测试下,我没用 - -
//中通签名方法
protected function generateSignature($params,$appSecret){
// 步骤1: 待签名字符串 = 请求参数 + appSecret
$sign = $params . $appSecret;
// 步骤2: utf8Bytes = 使用 UTF-8 编码成 byte 数组
$utf8Bytes = mb_convert_encoding($sign, 'UTF-8');
// 步骤3: md5bytes = md5(utf8Bytes)
$md5Bytes = md5($utf8Bytes);
// 步骤4: x-datadigest = base64Str(md5bytes)
$xDataDigest = base64_encode($md5Bytes);
return $xDataDigest;
}