错误:未定义数组索引:openid 。经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been used”,}
原因为:微信支付code 只能使用一次,当第二次重复使用时就会出现此错误。
WxPay.JsApiPay.php【这个应该是老版本的做法,或者说经过二次跳转的做法】
逻辑为将获取到的openid以code为名存入session;当再次请求时,查询该次请求中以code为名的session是否存在,以此防止二次使用code。
还有一种原因:
微信支付获取用户openid时,报出错误。原因是同时配置了http和https,微信网页oauth认证通知了两次
解决方法:
时都会重定向链接redirect_uri都会自动请求两次,由于并发导致了一些问题,
那么,为什么会请求两次呢?,调试时发现会访问两次,一次是301,页面重定向了,第二次跟第一次就差这个参数。加上后,不再报错。code 可以了。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxx&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect
&connect_redirect=1 在WxPay.JsApiPay.php该位置加入这个参数
其实到这,我依然没解决问题,而此时,我突然想起来,get_open_id的http也是缺少s,所以我在此修改了http为https,结果成功了