zoukankan      html  css  js  c++  java
  • 微信公众号开发(二)获取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

    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
    }
    

      

  • 相关阅读:
    nginx能访问html静态文件但无法访问php文件
    LeetCode "498. Diagonal Traverse"
    LeetCode "Teemo Attacking"
    LeetCode "501. Find Mode in Binary Search Tree"
    LeetCode "483. Smallest Good Base" !!
    LeetCode "467. Unique Substrings in Wraparound String" !!
    LeetCode "437. Path Sum III"
    LeetCode "454. 4Sum II"
    LeetCode "445. Add Two Numbers II"
    LeetCode "486. Predict the Winner" !!
  • 原文地址:https://www.cnblogs.com/yachao1120/p/9319104.html
Copyright © 2011-2022 走看看