.net MVC 微信公众号 点击菜单拉取消息时的事件推送
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141016&token=&lang=zh_CN
业务描述:点击菜单,推送消息,消息内容为自定义的读取数据库信息之后,为用户推送的动态消息。
首先需要用代码实现自定义菜单,为对应的菜单指定click事件。
关于自定义菜单的创建及事件指定,请看上一篇文章,本篇主要介绍事件响应的实现。
MVC controller 中的代码如下:
- public void MenuEventHandle()
- {
- #region 验证Token 此块代码只在启用服务器配置时执行一次验证token令牌,服务器配置启用之后可以删掉块内代码,相关代码请看验证微信签名那一篇
- string echoStr = Request.QueryString["echoStr"];
- string signature = Request.QueryString["signature"];
- string timestamp = Request.QueryString["timestamp"];
- string nonce = Request.QueryString["nonce"];
- Log.logmsg("测试输出: echoStr = " + echoStr);
- Log.logmsg("测试输出: signature = " + signature);
- Log.logmsg("测试输出: timestamp = " + timestamp);
- Log.logmsg("测试输出: nonce = " + nonce);
- if (AdminUtil.CheckSignature("基本设置中的Token令牌", signature, timestamp, nonce) && !string.IsNullOrEmpty(echoStr))
- {
- Response.Write(echoStr);
- Response.End();
- }
- #endregion
- Log.logmsg("开始执行按钮事件");
- string postString = string.Empty;
- if (HttpContext.Request.HttpMethod.ToUpper() == "POST")
- {
- using (Stream stream = HttpContext.Request.InputStream)
- {
- //获取微信提交过来的参数
- Byte[] postBytes = new Byte[stream.Length];
- stream.Read(postBytes, 0, (Int32)stream.Length);
- postString = Encoding.UTF8.GetString(postBytes);
- //对其进行处理
- AdminUtil.MenuMessage(postString);
- }
- }
- }
AdminUtil类
- #region 处理应答消息
- /// <summary>
- /// 处理应答消息
- /// </summary>
- /// <param name="postStr">微信提交过来的参数</param>
- /// <returns></returns>
- public static string MenuMessage(string postStr)
- {
- string responseContent = "";
- XmlDocument xmldoc = new XmlDocument();
- xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("GB2312").GetBytes(postStr)));
- XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
- if (MsgType != null)
- {
- switch (MsgType.InnerText)
- {
- case "event":
- responseContent = WXApi.MenuEventHandle(xmldoc);//事件处理
- break;
- //case "text":
- // responseContent = TextHandle(xmldoc);//接受文本消息处理
- // break;
- default:
- break;
- }
- }
- return responseContent;
- }
- #endregion
WXApi类:
- public static string MenuEventHandle(XmlDocument xmldoc)
- {
- string responseContent = "";
- XmlNode Event = xmldoc.SelectSingleNode("/xml/Event");//事件类型,CLICK
- XmlNode EventKey = xmldoc.SelectSingleNode("/xml/EventKey");//事件KEY值,与自定义菜单接口中KEY值对应
- XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");//开发者微信号
- XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");//发送方账号一个openid
- if (Event != null)
- {
- //菜单单击事件
- if (Event.InnerText.Equals("CLICK"))
- {
- if (EventKey.InnerText.Equals("V1001_01"))//可以进行相关内容的实现,如发送自定义的动态消息
- {
- Log.logmsg("Event=" + Event + ";EventKey=" + EventKey + ";ToUserName=" + ToUserName + ";FromUserName=" + FromUserName + "。");
- AdminUtil.SendNewsMsg(FromUserName.InnerText, "进度提醒", "描述!", "", "");
- }
- }
- }
- return responseContent;
- }
基本配置如下:
.net MVC 微信公众号 点击菜单拉取消息时的事件推送的更多相关文章
- 微信公众号开发C#系列-7、消息管理-接收事件推送
1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...
- 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微信公众号接口开发之从零开发( ...
- ASP.NET MVC 微信公众号支付,微信公众平台配置
微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名
- C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)
文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...
- asp.net mvc 微信公众号token验证
本人的公众号要申请成为开发者,必须经过token认证.微信公众号的官方代码只列出了PHP代码的实例,明显是歧视.net用户.我用的asp.net mvc中的web api,结果调了好久都没有成功,最后 ...
- .net mvc 微信公众号 验证微信签名
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN ...
- JAVA微信公众号网页开发——将接收的消息转发到微信自带的客服系统
如果公众号处于开发模式,普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上,无法直接推送给微信自带的客服功能.如果需要把用户推送的普通消息推送到客服功能中,就需要进行代码 ...
- [3] 微信公众号开发 - 结合UEditor实现图文消息群发功能
0.写在前面的话 如何实现微信平台后台管理中的,图文消息发送功能? 大概的过程如下: 通过类似表单的形式,将文章各部分内容提交到后台,封装成一个实体类,并持久化到数据库中 需要推送的时候,将不同的文章 ...
随机推荐
- 【译】用 React 和 D3 创建图表
本文翻译自:https://dzone.com/articles/charts-with-modern-react-and-d3 本文将介绍如何利用 D3JS 和 ReactJS 来创建基础图表. R ...
- 企业安全01-Apache solr XML实体注入漏洞CVE-2017-12629
Apache solr XML 实体注入漏洞CVE-2017-12629 一.简介 Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apac ...
- 下载centos镜像的地址
- 单调栈高封装模板hia hia hia
这个单调栈应该可以了,舒服舒服 #include <bits/stdc++.h> using namespace std; #define limit (400000 + 5)//防止溢出 ...
- 在执行gem install redis时 : ERROR: Error installing redis: redis requires Ruby version >= 2.2.2
在执行gem install redis时 提示: gem install redis ERROR: Error installing redis: redis requires Ruby versi ...
- PyQt(Python+Qt)学习随笔:QTreeWidget的columnCount属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件中的每个项有一个或多个文字标签或其他装饰符(如图标),这些内容每个显示为一列.QTreeWi ...
- Error: Cannot find module '../lib/utils/unsupported.js'
报错: nodejs : Error: Cannot find module '../lib/utils/unsupported.js' 解决办法(linux): 去node目录下:/node***/ ...
- Flask学习 url和视图
因为扫描器的准备使用Flask框架,所以开始恶补Flask和前后端的知识 Flask是一个使用Python编写的轻量级Web应用框架,作者是 Armin Ronacher(他也是 Werkzeug 及 ...
- 2. Spring早期类型转换,基于PropertyEditor实现
青年时种下什么,老年时就收获什么.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https:// ...
- 个人介绍&软工5问
个人简历: 姓名:温海源 性别:男 专业:软件工程 学校:广东工业大学 技术能力:掌握C语言 JAVA在学 证书:CET4,CET6 联系方式:1424315382@qq.com 软工5问: 1. ...