使用C# .net開發微信公眾號之獲取AccessToken
獲取access_token
access_token是公眾號的全域性唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效。
公眾平臺的API呼叫所需的access_token的使用及生成方式說明:
1、為了保密appsecrect,第三方需要一個access_token獲取和重新整理的中控伺服器。而其他業務邏輯伺服器所使用的access_token均來自於該中控伺服器,不應該各自去重新整理,否則會造成access_token覆蓋而影響業務; 2、目前access_token的有效期通過返回的expire_in來傳達,目前是7200秒之內的值。中控伺服器需要根據這個有效時間提前去重新整理新access_token。在重新整理過程中,中控伺服器對外輸出的依然是老access_token,此時公眾平臺後臺會保證在重新整理短時間內,新老access_token都可用,這保證了第三方業務的平滑過渡; 3、access_token的有效時間可能會在未來有調整,所以中控伺服器不僅需要內部定時主動重新整理,還需要提供被動重新整理access_token的介面,這樣便於業務伺服器在API呼叫獲知access_token已超時的情況下,可以觸發access_token的重新整理流程。
公眾號可以使用AppID和AppSecret呼叫本介面來獲取access_token。AppID和AppSecret可在微信公眾平臺官網-開發頁中獲得(需要已經成為開發者,且帳號沒有異常狀態)。注意呼叫所有微信介面時均需使用https協議。如果第三方不使用中控伺服器,而是選擇各個業務邏輯點各自去重新整理access_token,那麼就可能會產生衝突,導致服務不穩定。
介面呼叫請求說明
http請求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
引數說明
引數 | 是否必須 | 說明 |
---|---|---|
grant_type | 是 | 獲取access_token填寫client_credential |
appid | 是 | 第三方使用者唯一憑證 |
secret | 是 | 第三方使用者唯一憑證金鑰,即appsecret |
返回說明
正常情況下,微信會返回下述JSON資料包給公眾號:
{"access_token":"ACCESS_TOKEN","expires_in":7200} |
引數 | 說明 |
---|---|
access_token | 獲取到的憑證 |
expires_in | 憑證有效時間,單位:秒 |
錯誤時微信會返回錯誤碼等資訊,JSON資料包示例如下(該示例為AppID無效錯誤):
{"errcode":40013,"errmsg":"invalid appid"} |
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET通過向這個介面傳送get請求來獲取,其中需要三個引數:grant_type, appid, secret 其中appid 和 secret 可以在在 公眾號後臺的 基本配置 中找到。 like this:
現在我們知道了獲取access_token的方法和需要的引數,那麼接下來我們就開始寫程式碼啦。 我把自己寫的程式碼貼出來供大家參考:
/// <summary>
/// 獲取AccessToken
/// </summary>
/// <returns></returns>
public static AccessToken GetAccessToken()
{
string grant_type = "client_credential";
string appid = "appid";
string secret = "secret";
string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret);
var wc = new WebClient();
var strReturn = wc.DownloadString(tokenUrl);
return strReturn
}
就像上面一樣,是不是很簡單?
微信給我們返回的是這種格式的json資料:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
如果有錯誤的話會返回這樣的json資料:
{"errcode":40013,"errmsg":"invalid appid"}大家可以去手冊裡查 微信的 全域性返回碼說明
access_token的快取就不給大家貼程式碼了。大家可以用 HttpRuntime 來快取access_token,我也不再往下延伸了。。。
此方式或許有不妥之處,熱烈歡迎大家吐槽。。。 錯誤之處也請大家指正,謝謝 ----- WeepingWeeper
謝謝大家觀看參考,讓我們一同進步。
微信的其他介面呼叫在持續更新中。。。歡迎關注持續關注。。