微信公眾號開發(二)獲取AccessToken、jsapi_ticket
阿新 • • 發佈:2019-02-19
Access Token
在微信公眾平臺介面開發中,Access Token佔據了一個很重要的地位,相當於進入各種介面的鑰匙,拿到這個鑰匙才有呼叫其他各種特殊介面的許可權。
access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。正常情況下access_token有效期為7200秒,重複獲取將導致上次獲取的access_token失效。
公眾號可以使用AppID和AppSecret呼叫本介面來獲取access_token。AppID和AppSecret可在開發模式中獲得(需要已經成為開發者,且帳號沒有異常狀態)。注意呼叫所有微信介面時均需使用https協議。
http請求方式: GET
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
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
}