升级PHP7.1后微信支付SDK遇到的一个bug

把PHP版本从5.3.3升级到7.1之后(操作系统版本CentOS 6.8, Apache 2.4),Web应用出现微信支付不能确认的问题。

查看日志,发现微信支付回调程序报错:

undefined index : HTTP_RAW_POST_DATA

网上搜索了一下,知道了答案。在我们所引用的微信商户API的支付SDK(v3版本,下载下来的文件名为WxpayAPI_php_v3.zip)中,WxPay.Api.php 的notify方法中有如下赋值调用:

//获取通知的数据
//$xml = $GLOBALS[‘HTTP_RAW_POST_DATA’];

因为这种取值方式在php5.6之后有可能取不到值(在php7之后的版本中已经弃用),故改为下句:
$xml = isset($GLOBALS[‘HTTP_RAW_POST_DATA’]) ? $GLOBALS[‘HTTP_RAW_POST_DATA’] : file_get_contents(“php://input”);

问题得到有效解决。参考如下链接:

https://secure.php.net/manual/zh/reserved.variables.httprawpostdata.php

http://stackoverflow.com/questions/9553168/undefined-variable-http-raw-post-data

同时,网上也有文章指出该SDK的其它一些错误,可参考:

http://www.cnblogs.com/xxoome/p/5705583.html