@
Sunyanzi @
xoxo @
cevincheung @
baocaixiong 这个是发送过去的SIGN验证不通过,不是callback或者notify的时候,我这边不通过。
没有用http_build_query(),处理待签名数字和生成签名,都是用的官方DEMO里的函数。(本来我是自己写的,但是签名一直有问题,索性就将官方DEMO中的关键函数整个移植到了我的代码中,以肯定2者的处理方式一模一样)
所有数组ksort了,去掉了空格,生成了a=b&b=c&c=d这样的格式。
`
/**
* 生成要请求给支付宝的参数数组
* @
param $para_temp 请求前的参数数组
* @
return 要请求的参数数组字符串
*/
private function buildRequestParaToString($para_temp)
{
//待请求参数数组
$para = $this->buildRequestPara($para_temp);
dump($para);
//把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码
$request_data = createLinkstringUrlencode($para);
dump($request_data);
return $request_data;
}
/**
* 生成签名结果
* @
param $para_sort 已排序要签名的数组
* return 签名结果字符串
*/
private function buildRequestMysign($para_sort)
{
//把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = $this->createLinkstring($para_sort);
$mysign = md5($prestr . $this->alipay_secret_key);
return $mysign;
}
/**
* 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
* @
param $para 需要拼接的数组
* return 拼接完成以后的字符串
*/
private function createLinkstring($para)
{
$arg = "";
while (list ($key, $val) = each($para)) {
$arg .= $key . "=" . $val . "&";
}
//去掉最后一个&字符
$arg = substr($arg, 0, count($arg) - 2);
//如果存在转义字符,那么去掉转义
if (get_magic_quotes_gpc()) {
$arg = stripslashes($arg);
}
return $arg;
}
`