微信公众号开发(二)获取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代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /// <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数据包给公众号:
1 | { "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代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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:
1 2 3 4 5 6 | { "errcode" :0, "errmsg" : "ok" , "ticket" : "bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA" , "expires_in" :7200 } |
作者:RichardCui
出处:https://www.cnblogs.com/yachao1120/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-RichardCuiBlog。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步