ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)
“出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”。这是文档中的原话,也就是说我们在获取access_token的时候是要先得到component_verify_ticket的,而component_verify_ticket是每10分钟向我们的接收地址推送一次。
而域名地址是由我们自己去服务器上去部署,如下图:

/// <summary>
/// 一.推送component_verify_ticket
/// </summary>
/// <param name="collection"></param>
/// <returns></returns>
[HttpPost]
public ActionResult Index(FormCollection collection)
{
//在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket。第三方平台方在收到ticket推送后也需进行解密
byte[] data = Request.BinaryRead(Request.TotalBytes);
string postData = Encoding.Default.GetString(data);
//公众号第三方平台的appid
string appId = ConfigurationManager.AppSettings["WeixinAppID"];
//第三方平台申请时填写的接收消息的校验token
string token = ConfigurationManager.AppSettings["WeixinToken"];
//第三方平台申请时填写的接收消息的加密symmetric_key
string encodingAesKey = ConfigurationManager.AppSettings["WeixinEncodingAESKey"];
string sMsg = "";//解密后的内容
var msg = new Tencent.WXBizMsgCrypt(token, encodingAesKey, appId); int ret = msg.DecryptMsg(
Request.QueryString["msg_signature"],
Request.QueryString["timestamp"],
Request.QueryString["nonce"],
postData,
ref sMsg); var xDoc = XDocument.Parse(sMsg);
var q = (from c in xDoc.Elements() select c).ToList();
var infoType = q.Elements("InfoType").First().Value;
switch (infoType)
{
case "component_verify_ticket":
//q.Elements("ComponentVerifyTicket").First()
//这里就是component_verify_ticket的值,保存起来就可以了,处理完成后在页面上输出success,通知微信服务器已经接收到ticket
string _AppId = q.Elements("AppId").First().Value;
string _CreateTime = q.Elements("CreateTime").First().Value;
string _InfoType = q.Elements("InfoType").First().Value;
string _ComponentVerifyTicket = q.Elements("ComponentVerifyTicket").First().Value;
DateTime dt = DateTime.Now; var datacvt = from t in dbContext.tb_ComponentVerifyTicket
select t;
tb_ComponentVerifyTicket tb = new tb_ComponentVerifyTicket();
if (datacvt.ToList().Count == )//添加
{
tb.Cvt_AppId = _AppId;
tb.Cvt_CreateTime = _CreateTime;
tb.Cvt_InfoType = _InfoType;
tb.Cvt_ComponentVerifyTicket = _ComponentVerifyTicket;
tb.Cvt_DateTime = dt;
dbContext.tb_ComponentVerifyTicket.Add(tb);
dbContext.SaveChanges();
}
else//修改
{
foreach (var item in datacvt)
{
item.Cvt_Id = item.Cvt_Id;
item.Cvt_AppId = _AppId;
item.Cvt_CreateTime = _CreateTime;
item.Cvt_InfoType = _InfoType;
item.Cvt_ComponentVerifyTicket = _ComponentVerifyTicket;
item.Cvt_DateTime = dt;
}
dbContext.SaveChanges();
}
Response.Write("success");
Response.End();
break;
default:
break;
}
return View();
}
这里我们得到了component_verify_ticket,也就是我要的“ string _ComponentVerifyTicket = q.Elements("ComponentVerifyTicket").First().Value; ”
OK,到这里之后我们接下来的就是要获取access_token。
因为access_token的有效期为两个小时“第三方平台compoment_access_token是第三方平台的下文中接口的调用凭据,也叫做令牌(component_access_token)。每个令牌是存在有效期(2小时)的,且令牌的调用不是无限制的,请第三方平台做好令牌的管理,在令牌快过期时(比如1小时50分)再进行刷新。” So,我们可以考虑做一个Windows服务每两个小时去执行向微信服务发送请求又或者是时间对比法 (先记录得到component_access_token的时间再取component_access_token值的时候查得当前时间,通过两个时间差做比较,如果大于等于2小时就重新去查询,否则去查询数据库或缓存中的component_access_token)
protected override void OnStart(string[] args)
{
string str = "服务开启";
System.Threading.Timer t = new System.Threading.Timer
(new System.Threading.TimerCallback(testTheNet), null, * * , * * ); //System.Threading.Timer t = new System.Threading.Timer
// (new System.Threading.TimerCallback(_testime), null, 1000 * 60, 1000 * 60); }


到这里access_token我们就已经获取到了~~
ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)的更多相关文章
- 微信公众号的搭建-第四天(2)-获取并缓存access_token
1. 什么是access_token? 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- 【tp5.1】微信公众号授权登录及获取信息录入数据库
微信公众号开发文档链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 微信公众号授权登录分为两种: 1.以 ...
- uniapp - 微信公众号授权登录
[缘由] 采用uniapp进行微信小程序和微信公众号双版本开发:考虑到用户唯一性,我们后端确定了以“unionid”.作为唯一标识. 有的小伙伴估计也是刚入这坑,我就简单说一下步骤流程 [摸索] ...
- ASP.NET MVC 微信公众号支付,微信公众平台配置
微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名
- asp.net mvc 微信公众号token验证
本人的公众号要申请成为开发者,必须经过token认证.微信公众号的官方代码只列出了PHP代码的实例,明显是歧视.net用户.我用的asp.net mvc中的web api,结果调了好久都没有成功,最后 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)
文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...
- 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题
开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...
随机推荐
- .net持续集成cake篇之常见文件及路径操作
系列目录 Cake常见文件和路径操作 在自动化构建任务里,很多操作都是跟文件打交道,比如文件打包,文件压缩,文件归档,文件传输,目录清理等.本节介绍一些cake里常见的文件操作方法 Cake相对路径问 ...
- Runtime.addShutdownHook()(译)
序言: 每一个Java程序都可以为JVM增加一个关闭钩子.JVM将在关闭之前执行关闭钩子中的指令. 问题: 一个程序可能需要在退出前执行一些指令.程序可能由于下列原因而退出: 所有的线程已经执行完毕 ...
- vue数据修改不同步更新的问题解决方案
最近在做一个组件封装的功能,用到父组件将数组(this.DataSource,this.DefaultItem)传到给子组件,子组件接受该数组来进行添加数组和删除数组的操作.因为子组件无法直接修改父组 ...
- webapi处理OPTIONS请求
报错1信息 Access to XMLHttpRequest at 'http://localhost:4445/api/v/getmsg' from origin 'http://localhost ...
- 《Real World Haskell》内容脉络整理
p.s. 其实就是28–(6入门[1~4,6])-(10暂不用[17,20~28])=13网页啊! 1~ 6 章: 语法入门 (类型,函数,表达式语法糖,typeclass) 7~13章: 熟练/ ...
- PIE SDK内存矢量数据的创建
1.功能简介 GIS将地理空间数据表示为矢量数据和栅格数据.矢量数据模型使用点.线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点.河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联.栅 ...
- $.fn.extend 与 $.extend的区别
今天看到别人写的jquery 代码都是这样的 $.fn.extend 所以查询了一下,因为自己不是前端开发,看到这样写的,感觉很牛逼.从百度上搜到的感觉解释的还是挺好的,作为记录,方便以后查找. 搜索 ...
- APS系统如何落地?用户实际痛点解析!
APS软件在中国的发展,在很长的时间内处于非常尴尬的状态:大企业都了解APS很重要,但只有非常少的企业肯真正实施APS软件,处于叫好不叫座的状态.直到工业4.0概念流行后,APS才逐渐被国内企业所认可 ...
- ssh实现无密码登陆
参考教程:https://linux.cn/article-5444-1.html 1.假设你有一台主机A(ip:111.111.111.111),用户名为server123,想无密码登陆到主机B(1 ...
- Django框架(九)-- 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询
一.创建多表模型 一对一:OneToOneField 一对多:ForeignKey 多对多:ManyToManyField 创建表时,会自动添加一个nid字段,并且自增,所以id可以不用手动创建 On ...