关于微信支付接口WxpayAPI_php_v3 SDK在PHP7不能成功回调的问题

浏览:4488 发布日期:2017/03/18 分类:技术分享 关键字: PHP7 微信支付
最近在做一个项目,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方式接收数据,亲测可用
最佳答案
评论( 相关
后面还有条评论,点击查看>>