记一次微信JSAPI支付URL出现两个订单号的问题,支付页面有?问号

如果发起jsapi支付页面的url类似

/pay.php?order_no=12345678

这种格式的话,那么在发起jsapi支付的时候,做完网页登录授权也就是获取openid后,页面跳转回来,此时你会发现url变成了

/pay.php?order_no=12345678order_no=12345678

多了个

order_no=12345678

导致页面上获取订单号失败,从而支付不能成功拉起。

出现这个问题的原因就是api接口在拼接当前页面(也就是获取openid后返回的页面)完整url时出现了问题

问题解决

api包里搜索文件"WxPay.JsApiPay.php",找到后打开搜索"GetOpenid"函数,将

$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);

改成

if(strpos($_SERVER['REQUEST_URI'],'?') === false){
	$baseUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'];
}else{
	$baseUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}

保存即可。

最新版本的接口不知道是否还有这个问题,如果遇到同样问题的朋友可以参考下!