微信支付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获得openidif (!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获得openidif (!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 usedreturn $openid;}
}

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

微信支付JsApi 40163错误相关推荐

  1. jsapi支付签名_PHP实现微信支付(jsapi支付)流程步骤详解

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路. 前期准备: 1.微信认证服务号,并且开通了微 ...

  2. php如何接入微信支付接口,PHP实现微信支付(jsapi支付)流程的方法

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路. 前期准备: 1.微信认证服务号,并且开通了微 ...

  3. 关于IOS调用微信支付jsapi不起作用的解决方法

    关于IOS调用微信支付jsapi不起作用的解决方法 参考文章: (1)关于IOS调用微信支付jsapi不起作用的解决方法 (2)https://www.cnblogs.com/randy619/p/5 ...

  4. ThinkPHP中实现微信支付(jsapi支付)流程

    之前写过一篇文章讲了 PHP实现微信支付(jsapi支付)流程 ,详见文章: PHP实现微信支付(jsapi支付)流程. 当时的环境是没有使用框架的,直接在一个域名指向的目录下边新建目录之后访问该目录 ...

  5. PHP实现微信支付(jsapi支付)流程

    最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路. 前期准备:  1.微信认证服务号,并且开通了 ...

  6. php微信支付jsapi,ThinkPHP实现微信支付(jsapi支付)

    这篇文章主要介绍了ThinkPHP实现微信支付(jsapi支付)流程教程详解,需要的朋友可以参考下 之前写过一篇文章讲了PHP实现微信支付(jsapi支付)流程 ,详见文章:PHP实现微信支付(jsa ...

  7. jsp页面微信支付接口_微信支付 JSAPI 开发中的问题

    前言:这篇文章讲的是利用微信官方提供的JSPAI接口,实现微信网页支付.希望在看之前,要确认一下几件事情,否则会让您在解决问题是很费解. ① 接口文档版本号是V3.3(在官方提供的PHP DEMO中的 ...

  8. 一次性解决微信支付-JSAPI支付问题(想把微信支付JSAPI文档撰写者按在地上摩擦)

    最近一个项目需要接入微信支付,所以在现有的项目中接入这个功能,但是最终发现,微信支付是个大坑,至少我认为微信支付文档的撰写者应该是小学水平,又或者是幼儿园水平,写文档的能力简直无语,很多关键性的细节居 ...

  9. 微信支付JSAPI(公众号支付)接口调用

    来看微信支付jsapi接口是怎么调用的 步骤一:获取微信支付四大参数 首先要想支持微信支付,必须拥有两个账号 微信公众平台:账户 公众APPID,APPSECEPT ,微信商户平台商户ID, API密 ...

最新文章

  1. 【转载】Oracle10g数据类型总结
  2. 管理之道(三) - 不要吝惜赞美
  3. SharePoint 2013开发入门探索(一)- 自定义列表
  4. java insert方法_【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒...
  5. 【job】面试中常见的笔试梳理
  6. 1到100的偶数之和是多少_什么白酒适合收藏,收藏多久出手,茅台五粮液老酒价格是多少?...
  7. redhat rhel 7中如何切换中英文输入法。
  8. Newcoder lxh裁木棍 (不开long double见祖宗 ceil前不加long long也去
  9. Android 给图片加边框
  10. 【2021-09-22 修订】【梳理】计算机网络:自顶向下方法 第二章 应用层(docx)
  11. 《炬丰科技-半导体工艺》MEMS 应用中不同厚光刻胶的比较研究
  12. 直播带货赚钱太难,一定要学会这5种方法,让你收益翻倍
  13. 7-1 复数类的操作
  14. 从本质如何理解机器学习
  15. 节假日api接口之获取指定日期的节假日信息
  16. ABAP里OO ALV选中或container alv里的选中方法
  17. tuxedo错误码6_TUXEDO错误解析
  18. 每日英语:Report: Chinese Consumers Increasingly Divided
  19. 大数据Spark超经典视频链接全集
  20. matlab fspecial用法,Matlab 的fspecial函数用法

热门文章

  1. 《请停止无效努力》读书笔记脑图
  2. Mobox企业网盘支持对象存储帮助用户推进私有云
  3. ObjectARX单点JIG正交简单例子
  4. 2024浙大MBA提前批面试申请需要的素养和意识
  5. 新手做跨境电商,选对平台很重要
  6. Frobenius norm(弗罗贝尼乌斯范数)
  7. G20伦敦峰会公告全文
  8. java获取当日凌晨时间(获取当日零点)
  9. The Warriors []
  10. 2013年4月14日 22:46:03