前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于微信支付走过的坑【最新】

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

原创
作者头像
黄啊码
修改2021-08-05 18:01:19
6590
修改2021-08-05 18:01:19
举报

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

好了,进入正题:

错误:未定义数组索引: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,结果成功了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档