|
最近做项目需要对接支付宝,根据支付宝官网提供的demo整合完成,遇到一个问题,异步回调正常,同步回调提示验证失败。
第一感觉是否整合代码的问题,讲demo原封不动扔进系统,还是一样的问题。
论坛,网站找了好多都没有找到合适答案。只有跟代码 ,后来发现原来是支付宝和ci框架联合起来挖的坑。
说问题:
1.跟代码发现alipay_notify.class.ph/getSignVeryfy/ $para = paraFilter($para_temp);过滤掉了订单号导致生成验证签名失败
继续跟alipay_core.function.ph:
function paraFilter($para) {
$para_filter = array();
while (list ($key, $val) = each ($para)) {
if($key == "sign" || $key == "sign_type" || $val == "")continue;
else $para_filter[$key] = $para[$key];
}
return $para_filter;
}
用each 循环的
echo current($para) 发现直接从指针从第二位开始;原因找到了。问题就好解决了
2.跟ci框架代码CI/system/core/Input.php/_sanitize_globals方法对get请求参数进行校验时(代码如下)将数组指针指向第二位
if (is_array($_GET) AND count($_GET) > 0)
{
foreach ($_GET as $key => $val)
{
$_GET[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
}
}
我勒个擦 问题就这样,怎么改看个人爱好。
希望能帮到ci的同学们,以后ci中再不敢用
each 循环。
|
|