部分朋友升级PHP7后,遇到无法获取POST数据及微信支付回调失败等情况,是因为PHP7移除了$GLOBALS["HTTP_RAW_POST_DATA"]这个全局变量,建议用php://input方法代替,或者做一个判断,当获取到的xml数据为空时则通过php://input的方法接收数据,这样就可以兼容新旧PHP环境了。
// $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接受post数据,PHP7废弃的全局变量 if(!$postStr){ $postStr = file_get_contents('php://input'); } ......
为什么不直接用$_POST接收?因为由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此对text/xml这种类型的数据是无法解析为$_POST数组的。