Maison  >  Article  >  développement back-end  >  [PHP] Erreur JsApi 40163 de paiement WeChat

[PHP] Erreur JsApi 40163 de paiement WeChat

little bottle
little bottleavant
2019-04-17 10:43:394007parcourir

Cet article partagera avec vous l'erreur JsApi 40163 du paiement WeChat et le code de solution.
Erreur :
Indice de tableau non défini : openid.
Après inspection, il a été découvert que : et cela sera répété une deuxième fois. Cette erreur se produit lors de l'utilisation.
Référence associée à la solution : https://www.e-learn.cn/content/php/1102683
J'ai essayé la méthode dans la référence en vain, je l'ai donc réécrite en fonction des raisons :
Le problème a été trouvé après enquête. Il apparaît dans :
Méthode GetOpenid dans WxPay.JsApiPay.php, le code source est :

/**
 * 
 * 通过跳转获取用户的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;
   }
}
Le code modifié est :


/**
 * 
 * 通过跳转获取用户的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;
   }
}
La logique est d'obtenir L'openid est stocké dans la session au nom du code ; lorsque la requête est refaite, vérifiez si la session nommée dans la requête existe afin d'éviter que le code ne soit utilisé deux fois.

Tutoriels associés :

Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer