微信开发者-主动请求-实际开发-(3)获取access_token(C#)
2014-07-07 00:00
881 查看
摘要: 微信的很多功能都依赖于access_token,有了此字段就能从微信服务器获取各种信息
“access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。由于获取access_token的api调用次数非常有限,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。”---------微信开发者文档如是说。
1,基本类包括如下几个:
(1)WxAccessTokenEntity:请求access_token后的解析实体类。具体数据格式请参看微信开发者文档。类如下:
(2)WxAccessTokenHelper:实际请求类,请求方式为get。实际请求及解析过程请参看http://my.oschina.net/u/1867097/blog/287967及http://my.oschina.net/u/1867097/blog/287969,数据格式请参看微信开发者文档。执行成功后返回上面定义的“WxAccessToke
8000
nEntity ”类。类内容如下:
(3),WxErrorEntity :微信错误类。数据格式如:“{"errcode":40013,"errmsg":"invalid appid"}”,具体含义可参看微信全局返回码说明。类内容如下:
杂乱:(1)由于access_token的过期问题,需要重复请求。其有效期为7200秒,即2小时。又有接口调用次数限制。建议将access_token存于数据库中,过期后自动重新请求并更新数据,或者在程序中定义变量,并用线程检测其有效性,过期自动更新。其实最终目的就是保持当前access_token的有效性。若有适当机制限制,理论上一天只需请求12次,完全不会超出接口调用次数限制。若调用次数不超过每天限制(目前为:实际账号2000/天,测试账号200/天),也可以动态请求。
(2)“请开发者注意,由于技术升级,公众平台的开发接口的access_token长度将增长,其存储至少要保留512个字符空间。此修改将在1个月后生效,请开发者尽快修改兼容。”---微信官方文档有如下说法,保存数据库时请注意。
“access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。由于获取access_token的api调用次数非常有限,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。”---------微信开发者文档如是说。
1,基本类包括如下几个:
(1)WxAccessTokenEntity:请求access_token后的解析实体类。具体数据格式请参看微信开发者文档。类如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// WxAccessTokenEntity 的摘要说明 /// </summary> public class WxAccessTokenEntity { private String _access_token; /// <summary> /// 获取到的凭证 /// </summary> public String access_token { get { return _access_token; } set { _access_token = value; } } private int _expires_in; /// <summary> /// 凭证有效时间,单位:秒 /// </summary> public int expires_in { get { return _expires_in; } set { _expires_in = value; } } }
(2)WxAccessTokenHelper:实际请求类,请求方式为get。实际请求及解析过程请参看http://my.oschina.net/u/1867097/blog/287967及http://my.oschina.net/u/1867097/blog/287969,数据格式请参看微信开发者文档。执行成功后返回上面定义的“WxAccessToke
8000
nEntity ”类。类内容如下:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; /// <summary> /// WxAccessTokenHelper 的摘要说明 /// </summary> public class WxAccessTokenHelper { //请求access_token的url private static String access_tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; public static WxAccessTokenEntity GetAccessTokenFromWeiXin(String APPID, String APPSECRET) { String requestUrl = access_tokenUrl.Replace("APPID", APPID); requestUrl = requestUrl.Replace("APPSECRET", APPSECRET); String result = RequestHelper.sendGet(requestUrl); if (result == null || result == "") { throw new Exception("无返回数据"); } WxAccessTokenEntity access = new WxAccessTokenEntity(); try { access = (WxAccessTokenEntity)JsonHelper.FromJsonToModel(result, typeof(WxAccessTokenEntity)); } catch (Exception ex) { throw new Exception("数据解析异常," + ex.Message); } if (access == null || access.access_token == null || access.access_token == "") { WxErrorEntity error = (WxErrorEntity)JsonHelper.FromJsonToModel(result, typeof(WxErrorEntity)); if (error == null) { throw new Exception("数据解析异常,原因未知"); } throw new Exception("微信返回异常,errcode:" + error.errcode + ",errmsg" + error.errmsg); } return access; } }
(3),WxErrorEntity :微信错误类。数据格式如:“{"errcode":40013,"errmsg":"invalid appid"}”,具体含义可参看微信全局返回码说明。类内容如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// WxErrorEntity 的摘要说明 /// </summary> public class WxErrorEntity { //数据格式 //{"errcode":40003,"errmsg":" invalid openid "} private string _errcode; public string errcode { get { return _errcode; } set { _errcode = value; } } private string _errmsg; public string errmsg { get { return _errmsg; } set { _errmsg = value; } } }
杂乱:(1)由于access_token的过期问题,需要重复请求。其有效期为7200秒,即2小时。又有接口调用次数限制。建议将access_token存于数据库中,过期后自动重新请求并更新数据,或者在程序中定义变量,并用线程检测其有效性,过期自动更新。其实最终目的就是保持当前access_token的有效性。若有适当机制限制,理论上一天只需请求12次,完全不会超出接口调用次数限制。若调用次数不超过每天限制(目前为:实际账号2000/天,测试账号200/天),也可以动态请求。
(2)“请开发者注意,由于技术升级,公众平台的开发接口的access_token长度将增长,其存储至少要保留512个字符空间。此修改将在1个月后生效,请开发者尽快修改兼容。”---微信官方文档有如下说法,保存数据库时请注意。
相关文章推荐
- 微信开发者-主动请求-实际开发-(5)验证TOKEN(C#)
- 微信开发者-主动请求-实际开发-(4)自定义菜单(C#)
- 微信接口开发1--向微信发送请求--获取access_token
- 微信开发者-主动请求-准备工作-(2)处理微信的json返回结果(C#)
- 微信access_token的获取开发示例
- 微信开发(四):获取access_token和微信服务器IP
- 微信开发第二篇:获取全局access_token
- 微信开发者获取服务令牌(component_access_token){"errcode":41002,"errmsg":"appid missing"}
- 微信access_token的获取开发示例
- C#微信公众平台开发—access_token的获取存储与更新
- PHP微信开发之获取access_token
- 微信开发之access_token获取
- [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)
- 微信开发前接入和获取access_token
- PHP微信开发之获取access_token
- 微信开发学习总结(二)—微信开发入门(公众号接入以及access_token获取)
- 微信开发的access_token的获取
- C#微信公众平台开发之access_token的获取存储与更新
- 微信&java 开发4 access_token获取
- 微信开发-获取access_token