详细内容

本文将和大家分享一下微信支付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。

相关教程:PHP视频教程

40163 php,【PHP】微信支付JsApi 40163错误,_PHP_ 少侠科技相关推荐

  1. 微信支付JsApi 40163错误

    微信支付JsApi 40163错误 错误: 未定义数组索引:openid . 经过检查发现是 :微信支付授权获取 openId {"errcode":40163,"err ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 重写浏览器alert解决ios端原生alert出现当前网址的URL
  2. mysql服务器端口cpu_mysql导致服务器cpu100%的问题一例
  3. mysql批量插入:语法
  4. 我是如何在两天内做完一个网站的
  5. 新一代神器STM32CubeMonitor介绍、下载、安装和使用教程
  6. linux arm9视频哪个好,谈谈ARM7与ARM9的区别
  7. Localtunnel(Node.js 版) 使用教程
  8. 快速定制开发CAD电路图(电气原理图)详细流程及源码 浮云E绘图
  9. python爬虫实现下载酷我里面周杰伦的付费歌曲
  10. 七代处理器装win7_七代cpu为什么不支持win7?
  11. SpringCloud基础权限框架搭建(1)-Zuul整合SpringSecurityOAuth2(JWT)+Turbine-附源码
  12. 如何把照片kb缩小?详细步骤
  13. matlab——非线性规划
  14. 惊喜!轻松将word转换成pdf文档
  15. [落选]狗熊会人才计划第6期选拔作业
  16. 巨人史玉柱放弃独权:放任年轻研发团队犯错
  17. 百度bae部署html,百度BAE使用:应用配置文件 app.conf
  18. 弗洛伊德本我、自我、超我理论
  19. css display contents
  20. 视频格式转换器哪个好?怎样使用?

热门文章

  1. 微信商户平台所有产品总结
  2. 如何在开始菜单创建快捷方式
  3. 相位误差对SAR图像的影响
  4. pandas学习之变形
  5. Linux(Ubuntu)触摸屏校准
  6. 将多张小图片合并成一张大图片 Python3
  7. Linux搭建测试环境
  8. [转]PT与PX区别
  9. Google Earth Engine(GEE)基于哨兵数据计算植被覆盖度—以宁夏为例
  10. 第五届山东ACM大赛汇总