|
在使用wex5 3.6 的php baas server的过程中, 微信支付的demo 把其中的商户信息都修改完成后,
点击支付按钮,还是无法支付成功。 会返回 { "errcode":40163,"errmsg":"code been used“}
经过百度后,发现这个错误可能是 微信不允许5分钟内连续使用公众号的code来获取用户的openId引起的。
然后查看php的后台服务程序。在WxMpJsApi.php中 发现用户在每次调用支付的时候,都回调用其中的chooseWXPay()方法。
这个方法必须要获取openId, 目前的WxMpJsApi中是使用session来获取。如果获取不到就会用code再去微信官网申请openId,
问题就出现在这里了, 官网不允许5分钟内再次获取, 而调试发现在session中获取不到。
为什么session中获取不到呢? 我还没搞清,不过百度上说微信中是无法想平常那样使用session的。
所以没办法了,只能想办法传递openId过去了。
于是修改调用支付按钮的回调方法: Model.prototype.PayButtonClick= function (){
var mod=this;
var tradeNo = justep.UUID.createUUID();
var notifyUrl = location.origin + "/baas/weixin/weixin/notify";
wxPay.pay({
body : "800颗糖豆",
mchId : "1403158888",
notifyUrl : notifyUrl,
outTradeNo : tradeNo,
totalFee : "1",
openId : mod.openId,
success : function(e) {
alert(JSON.stringify(e))
},
cancel : function(e) {
alert(JSON.stringify(e))
},
fail : function(e) {
alert(JSON.stringify(e))
}
});
};
手动添加 openId参数给后台。
然后修改还在的WxMpJsApi.php ,把其中的 $openid=$_SESSION['openid'];改为 $openId = $_REQUEST["openId"];
OK。 微信支付成功。
请各位前辈看看我这样修改可以么? 是否有什么隐患之类的。谢谢。
|
|