Home  >  Article  >  Backend Development  >  [PHP] WeChat payment JsApi 40163 error

[PHP] WeChat payment JsApi 40163 error

little bottle
little bottleforward
2019-04-17 10:43:394006browse

This article will share with you the WeChat payment JsApi 40163 error and solution code.
Error:
Undefined array index: openid.
After inspection, it was found that: WeChat payment authorization obtains openId {"errcode":40163,"errmsg":"code been used",}
The reason is: WeChat payment code can only be used once, and it will be repeated the second time This error occurs when using.
Solving related reference: https://www.e-learn.cn/content/php/1102683
I tried the method in the reference to no avail, so I rewrote it according to the reason:
After troubleshooting, the problem was found Appears in: GetOpenid method in
WxPay.JsApiPay.php, the source code is:

/**
 * 
 * 通过跳转获取用户的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;
   }
}

The modified code is:

/**
 * 
 * 通过跳转获取用户的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;
   }
}

The logic is to convert the obtained openid into code Save the session with the name; when requesting again, check whether the session with the name code in the request exists to prevent the code from being used twice.

Related tutorials: PHP video tutorial

The above is the detailed content of [PHP] WeChat payment JsApi 40163 error. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete