微信網頁授權 通過code獲取openid 報錯40163 code been used


使用好好的微信功能,突然安卓無法正常使用了,蘋果的正常。

安卓報錯內容:

40163,code been used.

題外話:微信的東西,為何報英文錯誤呢,裝什么13.

實測結果:安卓獲取用戶信息時 ,觸發了兩次請求,而蘋果只請求一次。

各種搜索,各種嘗試,均無效。

沉下來好好想想,再反復測試, 最終發現問題出在獲取用戶信息的 時候,同一個code在短時間內使用了兩次,

public function get_access_token($code){
        //基礎token
//        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
        //網頁授權token
            $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->appId&secret=$this->appSecret&code=$code&grant_type=authorization_code";
            
            $dc['url']=$code;
            D("ticai_request_log")->add($dc);
            
            $res = json_decode($this->httpGet($url));
            return $res;
    }

至於多久后才能使用相同的code,還沒測試出來,

感覺問題在這里,那就在 上一層開始攔截,也就是,如果出現 相同的code時,不用再獲取用戶信息了。

 

關鍵代碼來了:

if (isset($_GET['code'])){
    $code=$_GET['code'];
    $code_session=session("code");
    if($code==$code_session){
        //什么都不做
    }
    else{
        //緩存起來
        session("code",$code,10);
        //獲取用戶信息
        $access_token=$jssdk->get_access_token($_GET['code']);
        這時獲取到的openid要緩存起來,后邊的代碼會用到的。
    }
}

思路:

回調后,獲取到code,與session比較,如果一樣,說明是第二次請求了,什么都不處理,

如果不一樣,說明是初次請求,那就調接口獲取用戶信息吧。

這里好像 

只能用session緩存,用cookie無法取到,其實前一天用cookie是沒問題的, 不知道為何第二天又不行了,

明天再測試一下session會不會再出問題,坑人的微信。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM