1. 程式人生 > >使用C# .net開發微信公眾號之獲取AccessToken

使用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"}
上面是微信開發手冊裡的說明。大家繼續向下看。。。 微信開發的第一步就是獲取 access_token,這個access_token 以後會在很多地方用到。而且我們每獲取一次access_token 它的有效期只有兩個小時,過了兩個小時我們就要重新獲取。而且每天獲取access_token的次數是有限制的。所以我們最好把access_token在伺服器做一下快取。不然獲取次數用完了那可就真的“爽歪歪~~”了。 然後我們看下 介面呼叫請求說明 
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

謝謝大家觀看參考,讓我們一同進步。

微信的其他介面呼叫在持續更新中。。。歡迎關注持續關注。。