이 글에서는 WeChat 결제 JsApi 40163 오류 및 해결 코드를 공유하겠습니다.
오류:
정의되지 않은 배열 인덱스: openid.
검사 결과: WeChat 결제 승인에서 openId {"errcode":40163,"errmsg":"code been Used"를 획득한 것으로 확인되었습니다.}
이유: WeChat 결제 코드는 한 번만 사용할 수 있으며 분실됩니다. 두 번째로 재사용할 때 이 오류가 발생합니다.
해결 방법 관련 참고 자료 : 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를 다음 이름으로 세션에 저장하는 것입니다. code; 다시 요청할 때 해당 코드가 두 번 사용되는 것을 방지하기 위해 해당 세션이 존재하는지 코드로 요청합니다.
관련 튜토리얼: PHP 비디오 튜토리얼
위 내용은 [PHP] 위챗 결제 JsApi 40163 오류의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!