Toggle navigation
首页
产品中心
全新RDIF.vNext低代码框架
镇店
.NET C/S开发框架
.NET Web敏捷开发框架
.NET 快速开发框架(全新EasyUI版本)
.NET 代码生成器
.NET WebAPI服务端开发框架
客户案例
付款方式
国思学堂
技术文章
新闻资讯
下载
关于
首页
技术文章
.NET(Core)
正文
原创
2019-04-13
浏览 (
12075
)
微信公众号开发C#系列-4、获取接口调用凭证
![获取access_token时序图](http://doc.rdiframework.net/blog/article/20190331121951154.png-pw) ## 概述 ## 获取接口调用凭证实质就是获取access_token。在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介绍如何获取Access Token。 按微信官方的说明,access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。 公众平台的API调用所需的access_token的使用及生成方式说明: 1、建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务; 2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器可对外继续输出的老access_token,此时公众平台后台会保证在5分钟内,新老access_token都可用,这保证了第三方业务的平滑过渡; 3、access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。 ## 怎么获取access_token? ## 公众号和小程序均可以使用AppID和AppSecret调用接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。小程序无需配置IP白名单。 **这儿需要特别说明的是**:在调用所有微信接口时均使用https协议;还有就是如果第三方不使用中控服务器,而是使选择各个业务逻辑点各自去刷新access_taken,那么就有可能会产生冲突,导致服务不稳定。 获取Access Token接口的网址如下: https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET] 方括号内的参数APPID与APPSECRET就是我们公众号的掊入信息,如下图所示: ![appID与appsecret](http://doc.rdiframework.net/blog/article/20190331121511923.png-pw) 因为得到access_token的接口支持Get请求,因为我们可以直接用浏览器访问这个接口得到access_token看一下效果,如下图所示: ![浏览器直接访问获取access_token](http://doc.rdiframework.net/blog/article/20190331121535481.png-pw) 正常情况下,微信会返回下述JSON数据包给公众号: {"access_token":"ACCESS_TOKEN","expires_in":7200} 错误时微信会返回错误码信息,JSON数据包实示例如下(该示例为AppID无效错误): {"errcode":40013,"errmsg":"invalid appid"} 可以看到返回的是一个Json格式的字符串,同时包含了过期的时间为7200秒,也就是2个小时内失效,之后需要重新请求前面的URL获取新的Token。 实际应用过程中我们一般建议统一的接口来定时刷新微信access_token,以保证整个微信应用的正常运行。只要2小时内统一刷新一下即可。同时对于获取到的凭证一般统一保存,可以存在数据库中,也可以放redis或配置文件中。 **注意**:使用access_token的时候要注意此接口是有调用频率限制的,当超过了每日最大的调用频率微信服务器就会对当前公众号做接口限制,具体详情请阅读官方文档([微信公众号接口频率限制说明](https://mp.weixin.qq.com/wiki?t=resource/res_main)) ## 实现方式 ## 获取access_token的参考代码如下: ``` List<KeyValuePair<string, object>> parmeters = new List<KeyValuePair<string, object>> { new KeyValuePair<string, object>(WeixinOfficialAccountTable.FieldDeleteMark, 0) }; var listOfficialAccount = BaseEntity.GetList<WeixinOfficialAccountEntity>(RDIFrameworkService.Instance.WeixinBasicService.GetOfficialAccountDTByValues(parmeters)); if (listOfficialAccount != null && listOfficialAccount.Count() > 0) { foreach (WeixinOfficialAccountEntity entity in listOfficialAccount) { try { if (entity.Category == (int)WeChatSubscriberEnum.EnterpriseSubscriber) { if (!string.IsNullOrEmpty(entity.AppId) && !string.IsNullOrEmpty(entity.AppSecret)) { //方法一:使用Senparc.WeiXin SDK的方法 entity.AccessToken = Senparc.Weixin.QY.CommonAPIs.CommonApi.GetToken(entity.AppId, entity.AppSecret).access_token; //方式二,直接调用微信的接口方法 //var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential".AsUrlData(), entity.AppId.AsUrlData(), entity.AppSecret.AsUrlData()); //AccessTokenResult result = Get.GetJson<AccessTokenResult>(url); //entity.AccessToken = result.access_token; entity.ModifiedOn = DateTime.Now; returnValue += RDIFrameworkService.Instance.WeixinBasicService.UpdateOfficialAccount(entity); } } else { if (!string.IsNullOrEmpty(entity.AppId) && !string.IsNullOrEmpty(entity.AppSecret)) { //方法一:使用Senparc.WeiXin SDK的方法 entity.AccessToken = Senparc.Weixin.MP.CommonAPIs.CommonApi.GetToken(entity.AppId, entity.AppSecret).access_token; //方式二,直接调用微信的接口方法 //var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential".AsUrlData(), entity.AppId.AsUrlData(), entity.AppSecret.AsUrlData()); //AccessTokenResult result = Get.GetJson<AccessTokenResult>(url); //entity.AccessToken = result.access_token; entity.ModifiedOn = DateTime.Now; returnValue += RDIFrameworkService.Instance.WeixinBasicService.UpdateOfficialAccount(entity); } } } catch (Exception ex) { } } } ``` 上面的代码我们封装了企业订阅号、媒体订阅号、个人订阅号、测试号的凭证调用。同时使用的Senparc.WeiXin SDK接口直接获取凭证的方式,大家可供参考,得到的凭证我是存在了数据库中,同时支持多公众号统一维护,详细可参考后面的文章会介绍微信公众号统一管理以及定时刷新公众号凭证。 调试获取到的凭证效果如下: ![代码调试获取access_token](http://doc.rdiframework.net/blog/article/20190331121603574.png-pw) ## 参考文章 ## [微信公众平台技术文档-官方](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) [Senparc.Weixin SDK + 官网示例源代码](https://github.com/JeffreySu/WeiXinMPSDK) [RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录](http://www.guosisoft.com/article/detail/190) [RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍](http://www.guosisoft.com/article/detail/169) [RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用](http://www.guosisoft.com/article/detail/189) [RDIFramework.NET代码生成器全新V3.5版本发布-重大升级](http://www.guosisoft.com/article/detail/199) ----- 一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。 RDIFramework.NET官方网站:http://www.rdiframework.net/ RDIFramework.NET官方博客:http://blog.rdiframework.net/ 同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏! RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用! 欢迎关注RDIFramework.net框架官方公众微信(微信号:guosisoft),及时了解最新动态。 扫描二维码立即关注 ![微信号:guosisoft](http://doc.rdiframework.net/weixin.png)
正文到此结束
本文标签:
.NET
微信开发
挨踢业界
版权声明:
本站原创文章,由
guosisoft.com
发布,遵循
CC 4.0 by-sa
版权协议,转载请附上原文出处链接和本声明。
上一篇
微信公众号开发C#系列-5、用户和用户组管理-支持同步
下一篇
微信公众号开发C#系列-3、搭建微信本地调试环境-借助花生壳实现内网穿透
热门推荐
{{article.title}}
热门指数:
浏览({{article.lookCount + 5000}})
相关文章
{{article.title}}
该篇文章的评论功能暂时被站长关闭
说给你听
本文目录
文章标签
RDIF.NET
其他
微信开发
.NET
消息交互
.NetCore
项目管理
常用工具
工作流
Web前端
数据库
挨踢业界
随机文章
[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
.NET快速开发框架-RDIFramework.NET 全新EasyUI版发布
团队项目开发"编码规范"之一:概述
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->用户管理模块新增“重置用户密码”功能
【长文】带你搞明白Redis
.NET敏捷开发框架-RDIFramework.NET V5.1发布(跨平台)
[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
VS依赖注入(DI)构造函数自动生成局部私有变量
[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
经典的52条产品交互设计原则
ORACLE常见问题一千问[1至100](不怕学不成、就怕心不诚!)
团队项目开发"编码规范"之五:命名规范
.NET快速信息化系统开发框架 V3.2->Web版本工作流部分业务处理界面与查看界面全新展示
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.3版本全新发布
GitHub重磅更新!私有代码库从此免费,开发者齐夸微软送福利
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2版本 正式发布
ORACLE常见问题一千问[301至400](不怕学不成、就怕心不诚!)
[推荐]ORACLE SQL:经典查询练手第五篇(不懂装懂,永世饭桶!)
盘点WordPress站点维护与加速必备插件及技巧
[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)
网站信息
文章总数:599 篇
标签总数:8 个
分类总数:8 个
留言数量:1385 条
在线人数:
89
人
运行天数:1321天
最后更新:2023-05-18
QQ:406590790
13005007127