加入收藏 | 设为首页 | 会员中心 | 我要投稿 济宁站长网 (https://www.0537zz.cn/)- 行业智能、边缘计算、专有云、AI硬件、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP微信支付JsApi 40163错误解决方案

发布时间:2022-06-22 18:48:22 所属栏目:PHP教程 来源:互联网
导读:本文将和大家分享一下微信支付JsApi 40163错误以及解决方案代码。 错误:未定义数组索引:openid 。 经过检查发现是 :微信支付授权获取 openId {errcode:40163,errmsg:code been used,} 原因为:微信支付code 只能使用一次,当第二次重复使用时就会出现此错
  本文将和大家分享一下微信支付JsApi 40163错误以及解决方案代码。
 
  错误:未定义数组索引:openid 。
 
  经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been used”,}
 
  原因为:微信支付code 只能使用一次,当第二次重复使用时就会出现此错误。
 
  参考中的方法本人尝试无果,故自己根据原因重写:
 
  经排查发现问题出在:
 
  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);
 
  改后代码为:
 
  通过跳转获取用户的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");  

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

(编辑:济宁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读