[PHP] WeChat-Zahlungsfehler JsApi 40163

little bottle
Freigeben: 2023-04-05 21:40:02
nach vorne
4112 Leute haben es durchsucht

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;
   }
}
Nach dem Login kopieren

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;
   }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage