公众号第三方平台审核通过之后,微信的服务器会定时(10分钟一次)给"授权事件接收URL"发送component_verify_ticket,这里我们需要及时更新component_verify_ticket

就是下面这个链接

下面这里是我的处理函数

  private void ResponseRequest()
{
//WXBizMsgCrypt 这个类是腾讯提供的,下载地址是http://mp.weixin.qq.com/wiki/static/assets/a5a22f38cb60228cb32ab61d9e4c414b.zip
//这里的构造函数我自己改写了,腾讯提供的构造函数需要提供三个参数的,具体请看微信提供的示例代码
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(); string sReqMsgSig = Request["msg_signature"];
string sReqTimeStamp = Request["timestamp"];
string sReqNonce = Request["nonce"];
string sReqData = GetPost(); LogTool.LogToDirDest(filePath, LogType.Debug, string.Format("{1} 接收到的信息:{0}", sReqData, pageUrl)); string sMsg = ""; //解析之后的明文
int ret = 0;
ret = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, sReqData, ref sMsg);
if (ret != 0)
{
LogTool.LogToDirDest(filePath, LogType.Error, string.Format("{1} 解析出错:{0}", ret, pageUrl)); }
else
{
LogTool.LogToDirDest(filePath, LogType.Debug, string.Format("{1} 解析后的内容:{0}", sMsg, pageUrl)); var xDoc = XDocument.Parse(sMsg); List<XElement> 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
Response.Write("success");
Response.End();
break;
case "unauthorized":
//当用户取消授权的时候,微信服务器也会向这个页面发送信息,在这里做一下记录
LogTool.LogToDirDest(filePath, LogType.Debug, string.Format("{1} {0} 已取消授权", q.Elements("AuthorizerAppid").First().Value, pageUrl));
Response.End();
break;
default:
break;
}
}
}

补充一下我的GetPost()函数

 public string GetPost()
{
try
{
System.IO.Stream s = Request.InputStream;
int count = 0;
byte[] buffer = new byte[s.Length];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, buffer.Length)) > 0)
{
builder.Append(Request.ContentEncoding.GetString(buffer, 0, count));
}
s.Flush();
s.Close();
s.Dispose();
return builder.ToString();
}
catch (Exception ex)
{ throw ex; }
}

利用上面获得的component_verify_ticket作为参数,向微信服务器发送请求即可接收到第三方平台的accessToken

        /// <summary>
/// 获取第三方平台access_token
/// </summary>
/// <param name="component_appid"></param>
/// <param name="component_appsecret"></param>
/// <param name="component_verify_ticket"></param>
/// <returns></returns>
public static ResponseComponentToken Component_token(string component_verify_ticket)
{
var urlFormat = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
object data = null;
data = new
{
component_appid = Config.ServerAppID,
component_appsecret = Config.ServerAppSecret,
component_verify_ticket = component_verify_ticket
};
return CommonJsonSend.Send<ResponseComponentToken>("", urlFormat, data, timeOut: Config.TIME_OUT);
}

如果请求成功,返回的json结果示例如下:

{
"component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA", 
"expires_in":7200
}

自己转换一下即可

最新文章

  1. android FrameLayout详解
  2. VC++ 截屏代码,并保存为想要的格式(BMP,JPG,PNG,GIF等格式)
  3. Sql发布订阅设置不初始化订阅库架构的设置
  4. laravle faker
  5. R: NULL, NA, and NaN
  6. wp8.1 C#技巧: Data和ViewModel类编写
  7. 【python】 开始第一个项目
  8. Ubuntu开机时出现&amp;quot;没有正确安装GNOME电源管理器的默认配置
  9. 使用CATransition实现页面的“从左向右” “从右向左”的动画
  10. Android二维码开源项目zxing用例简化和生成二维码、条形码
  11. KNN算法的理解
  12. lua 限流
  13. springboot事物回滚
  14. ​《数据库系统概念》1-数据抽象、模型及SQL
  15. 常用的css文件
  16. LeetCode12.整数转罗马数字
  17. BZOJ 2440 [中山市选2011]完全平方数 (二分 + 莫比乌斯函数)
  18. nodejs图像处理模块
  19. BZOJ1149 [CTSC2007]风玲
  20. JavaScript权威指南第01章 JavaScript 概述

热门文章

  1. Bran的内核开发教程(bkerndev)-02 准备工作
  2. PHP ksort
  3. [NOIp2014] luogu P1351 联合权值
  4. Angular/Vue多复选框勾选问题
  5. Halcon一日一练:图像分割之阈值分割1
  6. boost::VS2017下编译和配置boost库
  7. 关于JavaScript if...else &amp; if 判断简写
  8. pytest中unicode编码问题(如test_fix.py::Test1::test_s1[\u6d4b\u8bd5-\u6d4b\u8bd5])
  9. Qt乱码的问题
  10. 元祖tuple