Heim >Backend-Entwicklung >PHP-Tutorial >[PHP] WeChat-Zahlungsfehler JsApi 40163

[PHP] WeChat-Zahlungsfehler JsApi 40163

little bottle
little bottlenach vorne
2019-04-17 10:43:394140Durchsuche

In diesem Artikel erfahren Sie den Fehler- und Lösungscode für die WeChat-Zahlung JsApi 40163.
Fehler:
Undefinierter Array-Index: openid.
Nach der Überprüfung wurde festgestellt, dass: Die WeChat-Zahlungsautorisierung erhält die openId {"errcode":40163,"errmsg":code wurde verwendet",🎜>Der Grund ist: Der WeChat-Zahlungscode kann nur einmal verwendet werden. und es wird beim zweiten Mal wiederholt. Dieser Fehler tritt bei der Verwendung auf.
Zugehörige Referenz für die Lösung: https://www.e-learn.cn/content/php/1102683
Ich habe die Methode in der Referenz ohne Erfolg ausprobiert und sie daher aus folgenden Gründen neu geschrieben:
Das Problem wurde nach einer Untersuchung gefunden. Es erscheint in:
GetOpenid-Methode in WxPay.JsApiPay.php, der Quellcode lautet:

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

Der geänderte Code lautet:


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

Die Logik besteht darin, die erhaltene OpenID in Code umzuwandeln. Speichern Sie die Sitzung mit dem Namen. Überprüfen Sie bei einer erneuten Anforderung, ob der Code mit dem Namen der Sitzung in der Anforderung vorhanden ist, um zu verhindern, dass der Code zweimal verwendet wird.

Verwandte Tutorials:

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt von[PHP] WeChat-Zahlungsfehler JsApi 40163. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen