设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-06-22 13:39 所属栏目:121 来源:互联网
导读:本文将和大家分享一下微信支付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。
 
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读