微信公众号开发获取AccessTokenjsapi_ticket

Posted 小猫钓鱼吃鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信公众号开发获取AccessTokenjsapi_ticket相关的知识,希望对你有一定的参考价值。

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
}

  



以上是关于微信公众号开发获取AccessTokenjsapi_ticket的主要内容,如果未能解决你的问题,请参考以下文章

微信公众号开发 - 静默授权获取用户信息

微信公众号开发及时获取当前用户Openid及注意事项

微信公众平台如何获取用户基本信息 java

微信公众号授权--前端

微信公众号开发获取用户信息

微信公众平台如何获取用户基本信息 java