呼叫微信介面token的問題

zacklee發表於2019-01-19

前言

微信的影響力眾所周知,越來越多的人也都離不開它,工作,生活,社交的好幫手。相信大家對微信公眾號,小程式也都不陌生,那麼在開發公眾號,小程式的時候需要呼叫到微信的介面,固然就會遇到token的問題,有哪些問題,以及怎麼解決的呢,我們繼續往下看。

問題一:微信介面返回”errcode”:48001,”errmsg”:”api unauthorized”

原因有下面幾個:
1、服務號可能沒認證,介面功能未授權
2、 appID和appsecret用的還是你申請的訂閱號裡面(個人只能申請公眾號型別為訂閱號)
3、用 scope=snsapi_base,獲取使用者的基本資訊
4、用 scope= snsapi_userinfo ,獲取使用者的基本資訊access_token失效了

解決辦法:
1、確認公眾號已獲得該介面的許可權,可在公眾平臺官網-開發中心頁中檢視介面許可權
2、把專案裡面的appID和appsecret改成測試公眾號的
3、 scope=snsapi_base不能用於獲取使用者基本資訊
4、 access_token 失效後,可以使用 refresh_token 呼叫介面https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1} 重新獲取 access_token(有效期7200秒)

問題二:微信介面返回 “errcode”: 40001,”errmsg”: “invalid credential, access_token is invalid or not latest

原因:
1、token失效或者不是最新的

解決辦法:
(1)把獲取到的token存入到快取中,設定過期時間大約為3分鐘,每次獲取token時優先從快取裡獲取
(2)做重新整理token的功能。呼叫介面https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={0}可查token,介面返回errcode= 40001時,把快取裡的token清除,然後再重新獲取。

附上程式碼

1、獲取token的方法
     public function getaccess_token()
     {        
         load()->model(`account’);    
        $account_api = WeAccount::create();     
        $token = $account_api->getAccessToken();    
        $result = $this->clearAccessToken($token,$account_api);    
       if(!empty($result[`token`])){        
             $token = $result[`token`];     
       }    
       if(is_error($token)){        
            $this->echoMsg(0,`access_token獲取失敗。`);     
       }    
      return $token;
    }
2、重新整理token的方法
   public function clearAccessToken($access_token,$account_api)
   {        
    global $_W;    
    if(is_error($access_token)){         
        return $access_token;    
    }    
    $url = `https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=` . $access_token;     $response = ihttp_request($url);    
    $result = @json_decode($response[`content`], true);    
    if(empty($result)) {        
        return $response;    
    }     
    if (!empty($result) && $result[‘errcode’] = ‘40001’) {                            cache_delete(cache_system_key(`accesstoken_key`, array(`key` => $_W[`account`][`key`])));         
        return array(`token`=>$account_api->getAccessToken());    
    }        
    return true;
}

相關資料

微信errcode”:48001,”errmsg”:”api unauthorized

相關文章