从PHP5.5升级到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方式接收数据,亲测可用 ------------------------------------------------------------------------------------------------- 就是在插件目录下WxPay.Api.php里 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 下方添加一行: $xml = file_get_contents('php://input', 'r'); ------------------------------------------------------------------------------------------------- 本文选自:http://www.thinkphp.cn/topic/46958.html ,感谢原作者 |