最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 【PHP】微信支付JsApi 40163错误_php教程


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

    以上就是【PHP】微信支付JsApi 40163错误的详细内容,更多请关注liyege.cn其它相关文章!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1173会员总数(位)
    • 111858资源总数(个)
    • 2本周发布(个)
    • 0 今日发布(个)
    • 245稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    [email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐