1. 程式人生 > >微信公眾號開發(二)獲取AccessToken、jsapi_ticket

微信公眾號開發(二)獲取AccessToken、jsapi_ticket

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
}