1,linux,多商户分销 2,严格按照http://www.fecmall.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_payment_wx_method.html,文档做了几次检查 2,手机浏览器支付成功,但支付页未刷新,订单状态显示待支付 3,在微信公众号里支付,点击支付,显示异常页面,跟踪页面提交地址为:http://XXXXX.com/payment/wxpayjsapi/start/payment/wxpayjsapi/start
微信内部使用微信支付报错排查:
对代码进行输出
./vendor/fancyecommerce/fecshop/lib/wxpay/example/WxPay.JsApiPay.php
public function GetOpenid() { //通过code获得openid if (!isset($_GET['code'])){ //触发微信返回code码 $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']); $url = $this->__CreateOauthUrlForCode($baseUrl); Header("Location: $url"); exit(); } else { //获取code码,以获取openid $code = $_GET['code']; $openid = $this->getOpenidFromMp($code); return $openid; } }
进行输出:
输出为:
结果原因,因为使用了反向代理,致使搞乱了传递的$_SERVER 参数,使 $_SERVER['REQUEST_URI'] 和 $_SERVER['QUERY_STRING']的值相同,进而导致的问题,需要排查nginx反向代理的问题。
$_SERVER
$_SERVER['REQUEST_URI']
$_SERVER['QUERY_STRING']
对于 $_SERVER['REQUEST_URI'] 和 $_SERVER['QUERY_STRING'] 参数:
1,http://localhost/aaa/ (打开aaa中的index.php) 结果: $_SERVER['QUERY_STRING'] = ""; $_SERVER['REQUEST_URI'] = "/aaa/"; $_SERVER['SCRIPT_NAME'] = "/aaa/index.php"; $_SERVER['PHP_SELF'] = "/aaa/index.php"; 2,http://localhost/aaa/?p=222 (附带查询) 结果: $_SERVER['QUERY_STRING'] = "p=222"; $_SERVER['REQUEST_URI'] = "/aaa/?p=222"; $_SERVER['SCRIPT_NAME'] = "/aaa/index.php"; $_SERVER['PHP_SELF'] = "/aaa/index.php"; 3,http://localhost/aaa/index.php?p=222&q=333 结果: $_SERVER['QUERY_STRING'] = "p=222&q=333"; $_SERVER['REQUEST_URI'] = "/aaa/index.php?p=222&q=333"; $_SERVER['SCRIPT_NAME'] = "/aaa/index.php"; $_SERVER['PHP_SELF'] = "/aaa/index.php";