1、access_tokenjson
access_token是公衆號的全局惟一接口調用憑據,公衆號調用各接口時都需使用access_token。開發者須要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前爲2個小時,需定時刷新,重複獲取將致使上次獲取的access_token失效。api
公衆平臺的API調用所需的access_token的使用及生成方式說明:
一、建議公衆號開發者使用中控服務器統一獲取和刷新Access_token,其餘業務邏輯服務器所使用的access_token均來自於該中控服務器,不該該各自去刷新,不然容易形成衝突,致使access_token覆蓋而影響業務;
二、目前Access_token的有效期經過返回的expire_in來傳達,目前是7200秒以內的值。中控服務器須要根據這個有效時間提早去刷新新access_token。在刷新過程當中,中控服務器可對外繼續輸出的老access_token,此時公衆平臺後臺會保證在5分鐘內,新老access_token均可用,這保證了第三方業務的平滑過渡;
三、Access_token的有效時間可能會在將來有調整,因此中控服務器不只須要內部定時主動刷新,還須要提供被動刷新access_token的接口,這樣便於業務服務器在API調用獲知access_token已超時的狀況下,能夠觸發access_token的刷新流程。緩存
公衆號能夠使用AppID和AppSecret調用本接口來獲取access_token。AppID和AppSecret可在「微信公衆平臺-開發-基本配置」頁中得到(須要已經成爲開發者,且賬號沒有異常狀態)。調用接口時,請登陸「微信公衆平臺-開發-基本配置」提早將服務器IP地址添加到IP白名單中,點擊查看設置方法,不然將沒法調用成功。服務器
https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET微信
參數說明session
參數 是否必須 說明
grant_type 是 獲取access_token填寫client_credential
appid 是 第三方用戶惟一憑證
secret 是 第三方用戶惟一憑證密鑰,即appsecretapp
返回說明
正常狀況下,微信會返回下述JSON數據包給公衆號:
{「access_token」:」ACCESS_TOKEN」,」expires_in」:7200}微信公衆平臺
2、具體實現代碼curl
public function get_access_token(){ $accesstoken=S(‘accesstoken’);//獲取當前session中的 accesstoken if (!isset($accesstoken)||empty($accesstoken)) { $appid=」xxxx」; //換成本身的appid $appsecret=」xxxxx」;//換成本身的appsecret $url = 「https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=」.$appid.」&secret=」.$appsecret; $re=$this->https_request($url); $result=json_decode($re,true); $accesstoken=$result[‘access_token’]; S(‘accesstoken’,$accesstoken,3600);//設置緩存爲1小時 } return $accesstoken; }
public function https_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}this
}