Access Token
在微信公眾平台接口開發中,Access Token占據了一個很重要的地位,相當於進入各種接口的鑰匙,拿到這個鑰匙才有調用其他各種特殊接口的權限。
access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。正常情況下access_token有效期為7200秒,重復獲取將導致上次獲取的access_token失效。
公眾號可以使用AppID和AppSecret調用本接口來獲取access_token。AppID和AppSecret可在開發模式中獲得(需要已經成為開發者,且帳號沒有異常狀態)。注意調用所有微信接口時均需使用https協議。
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
C#.NET代碼如下:
/// <summary> /// 獲取AccessToken /// </summary> /// <returns></returns> public static string getAccessToken() { string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppID + "&secret=" + AppSecret; HttpWebRequest webrequest = (HttpWebRequest)System.Net.HttpWebRequest.Create(url); HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();//請求連接,並反回數據 Stream stream = webresponse.GetResponseStream();//把返回數據轉換成流文件 byte[] rsByte = new Byte[webresponse.ContentLength]; //把流文件轉換為字節數組 try { stream.Read(rsByte, 0, (int)webresponse.ContentLength); string responseStr = System.Text.Encoding.Default.GetString(rsByte, 0, rsByte.Length).ToString().Replace("{", "").Replace("}", ""); string[] jsons = responseStr.Split(','); if (jsons.Length == 2) { string[] param = jsons[0].Split(':'); if (param.Length == 2 && param[0] == "\"access_token\"") { string tempAccessToken = param[1].Replace("\"", ""); return tempAccessToken ; } else { return "error"; } } return "error"; } catch { return "error"; } }
正常情況下,微信會返回下述JSON數據包給公眾號:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
jsapi_ticket
jsapi_ticket是公眾號用於調用微信JS接口的臨時票據。正常情況下,jsapi_ticket的有效期為7200秒,通過access_token來獲取。由於獲取jsapi_ticket的api調用次數非常有限,頻繁刷新jsapi_ticket會導致api調用受限,影響自身業務,開發者必須在自己的服務全局緩存jsapi_ticket 。
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
C#.NET代碼如下:
private static string getJsapiTicket() { string interfaceUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + AccessToken + "&type=jsapi"; HttpWebRequest webrequest = (HttpWebRequest)System.Net.HttpWebRequest.Create(interfaceUrl); HttpWebResponse webresponse = (HttpWebResponse)webrequest.GetResponse();//請求連接,並反回數據 Stream stream = webresponse.GetResponseStream();//把返回數據轉換成流文件 byte[] rsByte = new Byte[webresponse.ContentLength]; //把流文件轉換為字節數組 try { stream.Read(rsByte, 0, (int)webresponse.ContentLength); string strb = System.Text.Encoding.Default.GetString(rsByte, 0, rsByte.Length).ToString().Replace("{", "").Replace("}", ""); if ((strb.ToString().IndexOf("\"errcode\":42001") != -1) || (strb.ToString().IndexOf("\"errcode\":40001") != -1) || (strb.ToString().IndexOf("\"errcode\":40014") != -1) || (strb.ToString().IndexOf("\"errcode\":41001") != -1)) { //access_token錯誤 } else if (strb.ToString().IndexOf("\"errcode\":0,\"errmsg\":\"ok\"") != -1) { string[] jsons = strb.Split(','); if (jsons.Length == 4) { string[] param = jsons[2].Split(':'); if (param.Length == 2 && param[0] == "\"ticket\"") { string tempJsapiTicket = param[1].Replace("\"", ""); return tempJsapiTicket ; } else { return "error"; } } return "error"; } else { return "error"; } } catch { return "error"; } }
成功返回如下JSON:
{ "errcode":0, "errmsg":"ok", "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA", "expires_in":7200 }