目录
2. 示例代码
1. AccessToken介绍
1.1 什么是AccessToken
AccessToken即访问凭证,业务服务器每次主动调用企业号接口时需要带上AccessToken参数。
注:主动调用是指业务服务器调用企业号接口的操作过程,如通讯录管理、应用管理。
文档:http://qydev.weixin.qq.com/wiki/index.php?title=主动调用
1.2 获取AccessToken
AccessToken需要用CorpID和Secret来换取,不同的Secret会返回不同的AccessToken。
请求地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
参数说明:
参数 | 说明 |
CorpID | 企业Id |
CorpSecret | 权限管理组的凭证密钥 |
1.3 获取CorpID和Secret
首先得创建一个权限管理组才能获取到Secret。
创建步骤:微信企业号控制台 → 设置 → 权限管理组 → 新建管理组
注意事项: 这里有个【应用权限】的设置,在后面进行OAuth2.0验证时跳转的域名必须跟包含应用的【可信域名】一致。
2. 示例代码
正常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果。所以创建代码时,要存储有效期内的AccessToken。
以C#代码展示为例:
/// <summary> /// 微信企业号操作 /// </summary> public class WXQYHHelper { private WXQYHHelper() { } static string CORPID; static string SECRET; /// <summary> /// .Ctor /// </summary> static WXQYHHelper() { CORPID = ConfigurationManager.AppSettings["CorpID"]; SECRET = ConfigurationManager.AppSettings["Secret"]; } /// <summary> /// ACCESS_TOKEN最后一次更新时间 /// </summary> static DateTime _lastGetTimeOfAccessToken = DateTime.Now.AddSeconds(-7201); /// <summary> /// 存储微信访问凭证 /// </summary> static string _AccessToken; /// <summary> /// 获取微信访问凭证 /// </summary> public static string GetAccessToken() { try { if (_lastGetTimeOfAccessToken < DateTime.Now) { string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", CORPID, SECRET); string responseText = HttpHelper.Instance.get(url); // 封装的get请求 /* API:http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E5%8A%A8%E8%B0%83%E7%94%A8#.E8.8E.B7.E5.8F.96AccessToken 正确的Json返回示例: { "access_token": "accesstoken000001", "expires_in": 7200 } 错误的Json返回示例: { "errcode": 43003, "errmsg": "require https" } */ var rsEntity = new { access_token = "", expires_in = 0, errcode = 0, errmsg = "" }; dynamic en = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType<object>(responseText, rsEntity); // Newtonsoft.Json提供的匿名类反序列化 _lastGetTimeOfAccessToken = DateTime.Now.AddSeconds((double)en.expires_in - 1); _AccessToken = en.access_token; } return _AccessToken; } catch (Exception ex) { throw ex; } } }