关于微信支付走过的坑【最新】

2021-08-05 18:01:19 浏览数 (1)

 更多技术可进群交流,定期发技术福利或物品福利,欢迎想秀技术、学技术的朋友加入:

好了,进入正题:

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

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

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

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

代码语言:javascript复制
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 可以了。

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,结果成功了

0 人点赞