微信公众号开发C#系列-4、获取接口调用凭证

时间:2023-02-23 21:39:45

微信公众号开发C#系列-4、获取接口调用凭证

概述

获取接口调用凭证实质就是获取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就是我们公众号的掊入信息,如下图所示:

微信公众号开发C#系列-4、获取接口调用凭证

因为得到access_token的接口支持Get请求,因为我们可以直接用浏览器访问这个接口得到access_token看一下效果,如下图所示:

微信公众号开发C#系列-4、获取接口调用凭证

正常情况下,微信会返回下述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的时候要注意此接口是有调用频率限制的,当超过了每日最大的调用频率微信服务器就会对当前公众号做接口限制,具体详情请阅读官方文档(微信公众号接口频率限制说明

实现方式

获取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接口直接获取凭证的方式,大家可供参考,得到的凭证我是存在了数据库中,同时支持多公众号统一维护,详细可参考后面的文章会介绍微信公众号统一管理以及定时刷新公众号凭证。

调试获取到的凭证效果如下:

微信公众号开发C#系列-4、获取接口调用凭证

参考文章

微信公众平台技术文档-官方

Senparc.Weixin SDK + 官网示例源代码

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

RDIFramework.NET代码生成器全新V3.5版本发布-重大升级


一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。

RDIFramework.NET官方网站:http://www.rdiframework.net/

RDIFramework.NET官方博客:http://blog.rdiframework.net/

同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏!

RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用!

欢迎关注RDIFramework.net框架官方公众微信(微信号:guosisoft),及时了解最新动态。

扫描二维码立即关注

微信公众号开发C#系列-4、获取接口调用凭证

微信公众号开发C#系列-4、获取接口调用凭证的更多相关文章

  1. C&num;微信公众号开发 -- (四)获取API调用所需的全局唯一票据access&lowbar;token

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.access_to ...

  2. 微信公众号开发C&num;系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  3. 微信公众号开发C&num;系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  4. 微信公众号开发C&num;系列-12、微信前端开发利器:WeUI

    1.前言 通过前面系列文章的学习与讲解,相信大家已经对微信的开发有了一个全新的认识.后端基本能够基于盛派的第三方sdk搞定大部分事宜,剩下的就是前端了.关于手机端的浏览器的兼容性问题相信一直是开发者们 ...

  5. 微信公众号开发(三)获取access&lowbar;token

    微信公众号开发(三)获取access_token 1.说明 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.acce ...

  6. 微信公众号开发C&num;系列-9、多公众号集中管理

    1.概述 通过前面8篇关于微信开发相关文章的学习,我们已经对微信常用开发有了一个比较深入的了解.前面的文章都是基于某一特定公众号的,在现实业务中同一单位个体运营着不至一个公众号,此时就需要对多个公众号 ...

  7. 微信公众号开发C&num;系列-1、微信公众平台注册

    微信公众号简介 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发主要指的是公众号的账号类型,公众号的账号类型分为订阅号.服务号.企 ...

  8. 微信公众号开发C&num;系列-2、微信公众平台接入指南

    概述 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先 ...

  9. 微信公众号开发C&num;系列-5、用户和用户组管理-支持同步

    1.概述 眼前时下流行的经济有个叫粉丝经济,粉丝带动收益.一个好运营良好的公众号肯定会有一大批的粉丝团,如何挖掘粉丝来产生效益,是微信营销的关键.微信公众号后台本身提供了粉丝(用户)与用户分组的管理, ...

随机推荐

  1. 图层的核心动画(CABaseAnimation)

    Main.storyboard // //  ViewController.m //  7A14.图层的核心动画 // //  Created by huan on 16/2/4. //  Copyr ...

  2. android 使用系统照相程序照相并存储、显示在界面上

    大部分业务可以通过调用系统的相机程序来拍照. 界面如下: <?xml version="1.0" encoding="utf-8"?> <Li ...

  3. SP&lowbar;CreateInsertScript 将表内的数据全部拼接成INSERT字符串输出

    ),)) as begin set nocount on ) ) ) select @sqlstr='select ''insert '+@tablename select @sqlstr1='' s ...

  4. ovirt node的安装简介

    Ovirt安装模式  支持install,update,downupdate,reinstall四种安装方式.  install:全新安装(以前未安装过ovirt node).  update:安装比 ...

  5. 最通用的ibatis&period;Net使用sql server存储过程返回分页数据的详细例子

    ibatis.Net是一个比较简单和灵活的ORM框架,今天我分享一个我的项目中使用sql server通用存储过程来分页的一个例子,用ibatis.Net框架统一返回分页数据为IList<Has ...

  6. Vue学习2:模板语法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 如何清除保存在IE浏览器上的账号密码

    1,打开浏览器,打开右上角的工具选项,选择Internet选项 2,在‘常规’选项卡中点击“删除”按钮,在弹框中勾选“密码”,选择删除即可.

  8. Spring概况(一)

    spring是什么? spring是一个开源框架,最初是为了解决企业应用开发的复杂性而创建的,但现在已经不止应用于企业应用. 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. - 从大 ...

  9. 5年GTD自我管理经验,一块听听

    我在胜利油田做了20多年的油田信息化工作,以前的我经常处于这样一种状态: 当我正在做着手边的一项事情时,头脑里却不断地蹦出来其它的事务,让我烦心不已,焦虑不安:PPT经常要拖到汇报当天的凌晨才做完,有 ...

  10. 51nod 1577 异或凑数

    思路真的是挺巧妙的. 让我惊叹,原来线性基还能这么做?!?! 好吧,这种取若干个数异或凑数的题目怎么能少的了线性基呢? 但是,问题集中在于怎么快速提取一个区间的线性基 暴力n^2 线段树维护线性基?分 ...