0
点赞
收藏
分享

微信扫一扫

【黄啊码】关于微信支付走过的坑


错误:未定义数组索引:openid 。经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been used”,}

 

原因为:微信支付code 只能使用一次,当第二次重复使用时就会出现此错误。

WxPay.JsApiPay.php【这个应该是老版本的做法,或者说经过二次跳转的做法】

逻辑为将获取到的openid以code为名存入session;当再次请求时,查询该次请求中以code为名的session是否存在,以此防止二次使用code。

public function GetOpenid()

{
//通过code获得openid

if (!isset($_GET['code']) ){
//触发微信返回code码

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

$url = $this->__CreateOauthUrlForCode($baseUrl);

Header("Location: $url");

exit();

} else {
//获取code码,以获取openid

$code = $_GET['code'];

if(session("?$code")){
$openid = $this->getOpenidFromMp($code);

}else{
$openid= session($code);

}

session($code, $openid);// 为解决code been used

return $openid;

}

}

还有一种原因:

微信支付获取用户openid时,报出错误。原因是同时配置了http和https,微信网页oauth认证通知了两次

解决方法:

时都会重定向链接redirect_uri都会自动请求两次,由于并发导致了一些问题,

那么,为什么会请求两次呢?,调试时发现会访问两次,一次是301,页面重定向了,第二次跟第一次就差这个参数。加上后,不再报错。code 可以了。

​​

&connect_redirect=1 在WxPay.JsApiPay.php该位置加入这个参数

 

【黄啊码】关于微信支付走过的坑_微信支付

 其实到这,我依然没解决问题,而此时,我突然想起来,get_open_id的http也是缺少s,所以我在此修改了http为https,结果成功了

【黄啊码】关于微信支付走过的坑_小程序_02

 

举报

相关推荐

0 条评论