【PHP】微信支付JsApi 40163错误
发布:smiling 来源: PHP粉丝网 添加日期:2020-02-22 16:09:37 浏览: 评论:0
本文将和大家分享一下微信支付JsApi 40163错误以及解决方案代码。
错误:
未定义数组索引:openid 。
经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been used”,}
原因为:微信支付code 只能使用一次,当第二次重复使用时就会出现此错误。
解决相关参考:https://www.e-learn.cn/content/php/1102683
参考中的方法本人尝试无果,故自己根据原因重写:
经排查发现问题出在:
WxPay.JsApiPay.php中的GetOpenid方法,源码为:
通过跳转获取用户的openid,跳转流程如下:
1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
- *
- * @return 用户的openid
- */
- 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'];
- $openid = $this->getOpenidFromMp($code);
- return $openid;
- }
- }
改后代码为:
通过跳转获取用户的openid,跳转流程如下:
1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
- *
- * @return 用户的openid
- */
- 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);// ###### 2019.03.01 加 为解决code been used
- return $openid;
- }
- }
逻辑为将获取到的openid以code为名存入session;当再次请求时,查询该次请求中以code为名的session是否存在,以此防止二次使用code。
Tags: 微信支付JsApi 40163错误
- 上一篇:PHP新手入门你需要了解些什么?
- 下一篇:良心推荐的五大敏捷好用的PHP开发框架
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)