在微信支付时,我们写了回调地址,但回调里面没有内容。比如我们写了以下的接收代码:
public function payresult(){
$data = $GLOBALS["HTTP_RAW_POST_DATA"];
file_put_contents('data.txt',$data);
if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if(!$this->Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
return false;
}
//微信支付后的操作
return true;
}
我们在根目录下查看data.txt文件,发现要么打印不出来,要么直接没内容。原因在哪?
经过多次试验,终于找到了问题所在。原来自己在公众控制器里面加了这么一行代码:
function __construct(){
parent::__construct();
session_start();
if(!session("?openid")){
$this->getVistorInfo();
}
}
这是什么?这是验证当前访问有没有获取到访客的openID,如果没有,则重新发起请求。
问题也就出在这。
微信支付之类的回调,跟微信开发时设置的“服务器配置”一样。不能做这方面的限制。也就是微信给你返回结果了,你还验证人家有没有“openID”这显示是不行的。
所以,知道处理方式了吧?