.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;
        }

基本配置如下:

时间: 2024-08-16 17:20:59

.net MVC 微信公众号 点击菜单拉取消息时的事件推送的相关文章

微信公众号点击菜单直接打开手机浏览器的实现方式

最近遇到一个需求.朋友找我制作一个在微信中的聊天框,或者公众号菜单发布一条链接或者二维码,.跳出微信打开一个指定的我们自己的页面,拿到这个需求后我们团队分开去找资料研究方案,通过微信的开发文档.腾讯的第三方开发文档我们都查阅过资料但是最终只找到一些历史性的资料也就是以前可以现在已经全部封闭了,在网络上找到 很早之前一些前辈分享的遮挡.我们加以改进. 现在可以实现安卓手机的话是通过点击链接,直接跳转出微信.自动打开手机默认的浏览器 IOS的话还不能自动打开浏览器.我们还在尝试研发.希望有所突破!

微信公众号接口添加菜单时错误(errcode":40017 invalid button type)

POST提交时总是报错: {"errcode":40017,"errmsg":"invalid button type"} 最后查出来是由于数据中有中文引起的 解决: data = {"button":[ {"name": u"会员服务", "sub_button":[ {"type":"click","name&qu

C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码) 一.拼凑回复的XML字符串 微信被动回复的形式有一下六种: 1 回复文本消息 2 回复图片消息 3 回复语音消息 4 回复视频消息 5 回复音乐消息 6 回复图文消息 分别对应不同的XML形式,这里以文本消息和图文为例,读者举一反三其他的类似,不再赘述:

ASP.NET MVC 微信公众号支付,微信公众平台配置

微信公众号支付,首先要登录微信公众号进行配置: 第一步:配置网页授权域名 点击上图的修改则出现下面截图:进行修改(配置)网页授权的域名 第二步:配置支付授权目录 注意:支付授权目录的配置: 假设域名为:www.linjie.com 1.如果支付的页面在网站的根目录下,则配置格式为: http://域名/    例子:http://www.linjie.com/ 2.如果支付页面在网站的某个文件夹下,需要精确到文件夹:配置格式为:http://域名/文件夹名称/   例子支付页面在order文件下

C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们的绑定的地址上,通过解析XML数据,获取到微信用户发送的消息,让根据微信消息(文本:关键字,图片,语音等等)回复XML格式的数据给微信服务器,微信服务器再将接收到的消息返回给用户微信. 我们所需要做的:接收消息和返回消息 一.创建实体类 首先看文档http://mp.weixin.qq.com/wi

asp.net mvc 微信公众号token验证

本人的公众号要申请成为开发者,必须经过token认证.微信公众号的官方代码只列出了PHP代码的实例,明显是歧视.net用户.我用的asp.net mvc中的web api,结果调了好久都没有成功,最后发现只要下面几句即可: public void Get() { string temp = HttpContext.Current.Request.QueryString["echostr"]; HttpContext.Current.Response.Write(temp); HttpC

微信公众号的自定义菜单事件推送

1.创建自定义菜单 2.组装自定义菜单(JSON格式数据) 微网站:可以实现跳转到微信响应式页面 产品中心:可以实时获取服务器端产品信息,并以图文形式返回 关于我们:可以返回相关的文本信息 微网站:跳转链接 产品中心与关于我们:内部请求 请求代码,请参menu.php页面,创建成功,请取消关注微信公众账号并再次关注,效果如图 3.自定义菜单事件推送 A.接收相关参数(Event和EventKey) 在之前的api.php之中添加代码 B.对参数进行判断与操作 上传代码,效果如下图所示

微信公众号开发系列-发送客服消息

下面是做微信公众号开发用到最多的两个客服消息发送类型,文本信息和图文信息. 1.发送文本消息 { "touser":"OPENID", "msgtype":"text", "text": { "content":"Hello World" } } 參数 是否必须 说明 access_token 是 调用接口凭证 touser 是 普通用户openid msgtype

微信公众号之主动给用户发送消息

前一段时间项目中遇到一个稍微麻烦一点的问题. 即客户要求,他在后台编辑好文章后要主动给每个用户都发送消息,并可以让用户点击直接进入文章页面. 于是乎,当时脑子一热,想着没什么大的问题,so easy.模板消息不就得了. 后来在写代码的过程中却发现,并不行. 微信公众号中模板消息有很严格的限制. 1.必须有用户主动触发事件方可发送模板消息 2.模板消息一分钟只能发送六十条,超过六十条,不好意思.你懂. 于是乎,就想到了另一种方法:群发消息 但是一看文档中群发消息的限制,发现悲催了 群发消息服务号每