ホームページ > バックエンド開発 > PHPチュートリアル > [PHP] WeChat 支払い JsApi 40163 エラー

[PHP] WeChat 支払い JsApi 40163 エラー

little bottle
リリース: 2023-04-05 21:40:02
転載
4165 人が閲覧しました

この記事では、WeChat 支払い JsApi 40163 エラーと解決策のコードを紹介します。
エラー:
未定義の配列インデックス: openid。
検査の結果、次のことが判明しました: WeChat 支払いの承認は openId {"errcode":40163,"errmsg":"code been used",}
を取得します。理由は: WeChat 支払いコードは 1 回しか使用できません。 2回目も繰り返されます 使用時にこのエラーが発生します。
関連リファレンスの解決方法: https://www.e-learn.cn/content/php/1102683
リファレンスにある方法を試してもダメだったので、理由に応じて書き直しました:
調査の結果、問題が見つかりました。 表示場所:
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);
      Header("Location: $url");
      exit();
   } else {
      //获取code码,以获取openid
       $code = $_GET['code'];
       $openid = $this->getOpenidFromMp($code);
    
       return $openid;
   }
}
ログイン後にコピー

修正されたコード:

/**
 * 
 * 通过跳转获取用户的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;
   }
}
ログイン後にコピー

ロジックは、取得した openid をコードに変換することです。セッションを名前で保存します。再度リクエストするときは、コードが 2 回使用されることを防ぐために、リクエストに code という名前のセッションが存在するかどうかを確認します。

関連チュートリアル: PHP ビデオ チュートリアル

以上が[PHP] WeChat 支払い JsApi 40163 エラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート