|
最近在做一个项目,PHP本从5.4升级到PHP7。结果原来好好的微信支付,只能付钱,但是不能成功从微信支付服务端接收回调数据,一直提示xml数据错误。
测试了一下午发现问题出在WxPay.Api.php文件的414行。
/**
*
* 支付结果通用通知
* @param function $callback
* 直接回调函数使用方法: notify(you_function);
* 回调类成员函数方法:notify(array($this, you_function));
* $callback 原型为:function function_name($data){}
*/
public static function notify($callback, &$msg)
{
//获取通知的数据
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
//如果返回成功则验证签名
try {
$result = WxPayResults::Init($xml);
} catch (WxPayException $e){
$msg = $e->errorMessage();
return false;
}
return call_user_func($callback, $result);
}
问题就在这个$GLOBALS['HTTP_RAW_POST_DATA']上面。PHP7里已经抛弃了这个数据接收方式,所以无法从微信端接收到反馈的数据
/**
*
* 支付结果通用通知
* @param function $callback
* 直接回调函数使用方法: notify(you_function);
* 回调类成员函数方法:notify(array($this, you_function));
* $callback 原型为:function function_name($data){}
*/
public static function notify($callback, &$msg)
{
//获取通知的数据
//$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$xml = file_get_contents('php://input', 'r');
//如果返回成功则验证签名
try {
$result = WxPayResults::Init($xml);
} catch (WxPayException $e){
$msg = $e->errorMessage();
return false;
}
return call_user_func($callback, $result);
}
这个我修改过的,改用php://input方式接收数据,亲测可用 |
|