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
    }
    

      

  • 相关阅读:
    做代码的曲线问题
    全书目录
    关于《Delphi源代码分析》的讨论
    说说“从编程到工程”专栏的由来
    CF285E Positions in Permutations
    CF264B Good Sequences
    CF115E Linear Kingdom Races
    CF633F The Chocolate Spree
    CF767C Garland
    CF559C Gerald and Giant Ches
  • 原文地址:https://www.cnblogs.com/yachao1120/p/9319104.html
Copyright © 2011-2022 走看看