目录
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#代码展示为例:
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | /// <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; } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述