この記事では、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 サイトの他の関連記事を参照してください。