实例:用C#.NET手把手教你做微信公众号开发(16)--事件消息处理之点击菜单2

微信用户点击菜单时,会通过微信服务器转发两种事件给你的服务器,一种是拉取消息时的事件推送;另一种是跳转链接时的事件推送。

上篇讲了第一种,本篇先讲第二种。

一、消息格式

推送XML数据包示例:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[VIEW]]></Event>
  <EventKey><![CDATA[www.qq.com]]></EventKey>
</xml>

二、操作演示

 

三、代码实现

在接收到微信服务器发来的事件之后,首先由指定的接口网页AccessWx.aspx对事件类型进行判别,然后交给指定的事件处理类处理和回应。在本系列文章第1篇介绍的AccessWx.aspx.cs中开始部分引入命名空间using QinMing.Weixin.EventHandlerMenuView;

并完善下面处理View这一段,增加本篇给出的点击菜单跳转url事件处理环节。  

扫描二维码关注公众号,回复: 16158059 查看本文章
				else if(Event == "VIEW")
				{
					//对用户点击菜单触发的VIEW事件处理,使用QinMing.Weixin.EventHandlerMenuView命名空间下的MenuViewEventDeal类
					MenuViewEventDeal med = new MenuViewEventDeal();
					Response.Write(med.DealResult(weixinXML));	
				}

在命名空间QinMing.Weixin.EventHandlerMenuView下新建一个类MenuViewEventDeal,用来处理微信服务器发来的点击菜单事件。记得类源码文件要放在App_Code目录下!下面是点击菜单事件处理源码:
QinMingWeixinEventHandlerMenuView.cs文件内容如下:
 

using System;
using System.Web;
using System.Xml;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using QinMing.Config;
using QinMing.Tools;
using QinMing.Weixin.ReturnContent;

namespace QinMing.Weixin.EventHandlerMenuView
{
	//事件消息处理:点击菜单view
    public class MenuViewEventDeal :System.Web.UI.Page
    {

		public string DealResult(string weixinXML)
        {
            string content = DealMenuView(weixinXML);  
            return content;
        }

        public string DealMenuView(string weixinXML)
        {
            string strresponse = "";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(weixinXML);
            XmlNodeList list = doc.GetElementsByTagName("xml");
            XmlNode xn = list[0];
            string FromUserName = xn.SelectSingleNode("//FromUserName").InnerText;   //关注用户的加密后openid
            string ToUserName = xn.SelectSingleNode("//ToUserName").InnerText;       //公众微信号原始ID
            string MsgType=xn.SelectSingleNode("//MsgType").InnerText;
            string Event=xn.SelectSingleNode("//Event").InnerText;
			string EventKey=xn.SelectSingleNode("//EventKey").InnerText;
			
			//保存点击菜单view事件
			SaveEvent(FromUserName, ToUserName, EventKey);
			
            //给管理员发送粉丝点击菜单通知
			QinMing.WeixinTemplateMessage.SendTemplateMessage.SendRemindMsg("管理员openid", "粉丝点击菜单信息提醒" + FromUserName, "http://www.yourweb.com/DisplayOneUser.aspx?open_id=" + FromUserName);  
			
			return strresponse;
        }
		
		//保存事件信息
        public void SaveEvent(string FromUserName, string ToUserName,string EventKey)
        {
            SqlConnection conn = new SqlConnection(QinMingConfig.DatabaseConnStr);
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "insert into weixin_recv_event (msg_type,event_type,open_id,gh_id,recv_time,event_key) "
			    + "values ('event','VIEW','" + FromUserName + "','" + ToUserName + "',getdate(),'" + EventKey + "') ";
            //QinMingTools.WriteLog("sql语句:", cmd.CommandText);
			cmd.ExecuteScalar();
      
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
                conn.Dispose();
            }
        }

    }
}

猜你喜欢

转载自blog.csdn.net/daobaqin/article/details/124831417