寫在前面的話:前幾篇博客詳細(xì)講解了如何獲取用戶發(fā)送的消息并進(jìn)行回復(fù),這里的回復(fù)是一種被動的回復(fù),而被動回復(fù)的方式便是通過echo返回信息給微信服務(wù)器的POST請求,因此,其實我們并沒有算的上調(diào)用了微信的接口,從這一篇文章開始,才算是真正的調(diào)用微信接口開端,就從access_token講起。
======正文開始========
每時每刻都有許多用戶來調(diào)用微信接口,那么我們想要請求微信接口,如何知道是哪一個用戶來請求的呢?也就是說需要一個唯一的憑證來唯一的標(biāo)明一個公眾號,這個信息便是APPID和APPSECRET。這個信息可以在微信公眾號后臺讀取到,其中APPID直接能夠看到,而如果想要看到APPSECRET,需要管理員的手機掃描二維碼才能夠看到。這兩個信息唯一的表明了一個公眾號,由此也可見,這兩個信息對于一個微信公眾號來說,是非常敏感的信息。對于每次微信接口的調(diào)用,我們本可以使用APPID和APPSECRET,但是正因為它的敏感性,我們并沒有直接通過它,而是通過一個叫做access_token的信息來調(diào)用微信接口,而access_token則是通過APPID和APPSECRET來獲取的。下面詳細(xì)講解一下access_token管理的一些內(nèi)容。
一、獲取access_token
獲取access_token方法很簡單,只需要向如下接口發(fā)送GET請求即可
http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
其中APPID和APPSECRET填寫自己公眾號的相應(yīng)內(nèi)容即可,當(dāng)向微信服務(wù)器發(fā)送完成GET請求后,微信服務(wù)器會給回復(fù),回復(fù)內(nèi)容的格式為json格式(注意,不是xml格式),內(nèi)容如下:
{'access_token':'ACCESS_TOKEN','expires_in':7200}其中access_token一項就是我們所需要的值了,通過過這個值就能夠去調(diào)用其他微信接口了;
expires_in是過期時間,一般為2個小時,所以說我們獲取到的access_token并不是永久有效的,而是僅僅有2個小時的有效期,當(dāng)然了,這個內(nèi)容以后微信可能還會調(diào)整。關(guān)于這一項注意重點強調(diào)一下:你可能會問,為什么要考慮它的有效期呢?每次我都重新調(diào)用GET請求獲取access_token不就行了?答案是不可以的,有以下幾個原因:
?。?)每次獲取到的access_token值是不一樣的,這樣就有可能導(dǎo)致影響業(yè)務(wù)
(2)最主要的一點:微信對于調(diào)用access_token獲取接口是有次數(shù)限制的。
至于如何管理access_token,在第二部分講解。
前面是正常情況下,當(dāng)GET請求失敗的話,返回的信息如下:
{'errcode':40013,'errmsg':'invalid appid'}我們從中無法獲取到access_token,而通過具體的errmsg可以判斷錯誤的原因為:appid填寫的錯誤。
二、通過中繼服務(wù)器獲取access_token
雖然通過第一步我們已經(jīng)獲取到了access_token,但是每次使用access_token的時候,并不能通過調(diào)用接口的方式進(jìn)行獲取,原因前面講了,具體實施的話,可以通過一個中繼服務(wù)器,定時去獲取access_token,而我們的業(yè)務(wù)邏輯所需要的access_token,是從中繼服務(wù)器中獲取,而不是每次都請求微信接口獲取。
三、源碼示例講解
下面通過代碼實例進(jìn)行講解,之前我們的代碼都是寫在wechat.php之中,下面我們建立一個新的文件進(jìn)行演示,叫做geAccessToken.php。
1、設(shè)置access_token請求參數(shù):
$appid='wx85871939f72432432'; $secret='4026e323bfcb11ed35ea41a92ffsfdsgdsge'; $url='http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
這里的appid和secret填寫自己的信息。
2、通過curl獲取json數(shù)據(jù)
$ch=curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); $data=json_decode($result,true);
其中result中保存的就是GET請求收到的json數(shù)據(jù),通過json_decode將json數(shù)據(jù)轉(zhuǎn)化為數(shù)組;注意:需要在php中開啟curl.
3、取得access_token數(shù)據(jù)
var_dump($data['access_token']);
這里直接打印的access_token值。
4.中繼服務(wù)器設(shè)置
通過前面代碼就能夠獲取access_token了,實際項目中,可以將獲取的access_token插入數(shù)據(jù)庫表中,而獲取的方法可以通過cron每隔1個小時獲取一次。
實際業(yè)務(wù)中,需要access_token就可以直接從數(shù)據(jù)庫表中讀取了,這里就不貼代碼了。
至此,access_token管理的方法就講完了。
(完)
附源代碼:
<?php $appid='wx85871939f7f9b647'; $secret='4026e323bfcb11ed35ea41a924bc36f6'; $url='http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret; $ch=curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); $data=json_decode($result,true); var_dump($data['access_token']);?>
PHP編程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答