昨天调试支付宝快捷支付接口, 先跑支付宝提供的demo, 本地测试一切正常。 然后集成进网站。 网站php 框架是 codeigniter。这时出现问题, log显示"return_url_log:isSign=false", isSign=false 标示签名认证失败。 这里就很奇怪了, 签名验证算法是支付宝提供的, 支付成功, 参数也是支付宝返回的。偶
比较 demo 和 集成环境的 参数, 正常。
比较 签名算法的字符串参数, 发现有问题。
$para = $_GET
while (list ($key, $val) = each ($para)) {
if($key == "sign" || $key == "sign_type" || $val == "")continue;else $para_filter[$key] = $para[$key];
}
$_GET 中第一个参数丢失了
CI 版本 2.0.2
var_dump( $_GET) 正常
foreach( $_GET as $key=>$value){ 正常
echo $key ;
}
$arr["p1"]= "p1";
$arr["p2"]= "p2";
while(list($key, $value) = each ($arr)){ 正常
echo $key ;
}
while(list($key, $value) = each ($_GET)){ 不正常丢失第一个参数
echo $key ;
}
目前没找到原因, 只能怀疑是 CI 对 $_GET有什么处理, 和 each 函数有什么不兼容