首页 > PHP资讯 > 工具库 > .Net实现微信公众平台开发接口“信息回复”

.Net实现微信公众平台开发接口“信息回复”

工具库
对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。

今天说说下面三个

1、关注回复

2、自动回复

3、关键字回复

一、关注回复,自动默认回复

所谓关注回复,就是当关注着搜到公众号的时候,点击关注之后,微信返回给用户的信息,具体的实现办法

自动默认回复,就是无论你发送什么信息,如果没有特别处理,系统默认回复的信息。

接收微信的信息和发送信息,都是xml格式的,具体在开发文档中都有具体的说明的,现在就来说说如果实现微信信息的处理和应答。

1、先把预先设置好的回复信息保存到数据库表里面

CREATE TABLE [dbo].[w_reply](    [reply_id] [int] IDENTITY(1,1) NOT NULL,    [reply_text] [varchar](max) NULL,    [reply_type] [varchar](50) NULL,    [article_id] [int] NULL,    [wechat_id] [int] NULL,    [reply_fangshi] [int] NULL, CONSTRAINT [PK_w_reply] PRIMARY KEY CLUSTERED (    [reply_id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]GO

wechatapi.aspx页面处理下面信息

2、接收微信发过来的信息

#region 接收微信消息        ///         /// 接收微信信息        ///         private void RequestMsg()        {            //接收信息流            Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;            byte[] requestByte = new byte[requestStream.Length];            requestStream.Read(requestByte, 0, (int)requestStream.Length);            //转换成字符串            string requestStr = Encoding.UTF8.GetString(requestByte);            if (!string.IsNullOrEmpty(requestStr))            {                //封装请求类到xml文件中                XmlDocument requestDocXml = new XmlDocument();                requestDocXml.LoadXml(requestStr);                XmlElement rootElement = requestDocXml.DocumentElement;                XmlNode MsgType = rootElement.SelectSingleNode("MsgType");                //将XML文件封装到实体类requestXml中                RequestXml requestXml = new RequestXml();                requestXml.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;//开发者微信号                requestXml.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;//发送方微信号                requestXml.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;//消息发送信息                requestXml.MsgType = MsgType.InnerText;                //获取接收信息的类型                switch (requestXml.MsgType)                {                    //接收普通信息                    case "text"://文本信息                        requestXml.Content = rootElement.SelectSingleNode("Content").InnerText;                        break;                    case "image"://图片信息                        requestXml.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText;                        break;                    case "location"://地理位置信息                        requestXml.Location_X = rootElement.SelectSingleNode("Location_X").InnerText;                        requestXml.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText;                        break;                    //接收事件推送                    //大概包括有:关注/取消关注事件、扫描带参数二维码事件、上报地理位置事件、自定义菜单事件、点击菜单拉取消息时的事件推送、点击菜单跳转链接时的事件推送                    case "event":                        requestXml.Event = rootElement.SelectSingleNode("Event").InnerText;                        requestXml.EventKey = rootElement.SelectSingleNode("EventKey").InnerText;                        break;                }                string selday = "0";                int hh = selday == "0" ? 60 : int.Parse(selday) * 24 * 60;                //将发送方和接收方写入cookie中,后期使用                CookieHelper.WriteCookie("WeChatFrom", "ToUserName", requestXml.ToUserName, hh);                CookieHelper.WriteCookie("WeChatFrom", "FromUserName", requestXml.FromUserName, hh);                //回复消息                ResponseMsg(requestXml);            }        }        #endregion 接收微信消息

3、回复信息

#region 回复消息(微信信息返回)        ///         /// 回复消息(微信信息返回)        ///         /// 
        ///         public string GetKeyword(string FromUserName, string ToUserName, string Content)        {            string resXml = "";            string sqlWhere = "wechat_id=" + WeChat_ID + " and keyword_name='" + Content+"'";            DataTable dtKeyword = keyworddal.GetList(sqlWhere).Tables[0];                        if (dtKeyword.Rows.Count > 0)            {                dtKeyword = keyworddal.GetRandomList(sqlWhere, "1").Tables[0];                if (dtKeyword.Rows.Count > 0)                {                    string article_id = dtKeyword.Rows[0]["article_id"].ToString();                    string keyword_type = dtKeyword.Rows[0]["keyword_type"].ToString();                    string keyword_text = dtKeyword.Rows[0]["keyword_text"].ToString();                    switch (keyword_type)                    {                        case "text":                            resXml = "" + ConvertDateTimeInt(DateTime.Now) + "0";                            break;                        case "news":                            resXml = GetArticle(FromUserName, ToUserName, article_id, User_ID);                            break;                    }                }            }            else            {                resXml = GetDefault(FromUserName, ToUserName, WeChat_ID, User_ID);            }            return resXml;        }        #endregion 关键字回复

其他还有很多图片回复,二维码扫描回复信息等都大同小异,处理方式都差不多,参考开发文档很快就能搞定,这里就不在多说了,不明白的地方在讨论。

更多.Net实现微信公众平台开发接口“信息回复”相关文章请关注PHP中文网!

工具库

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持2不支持0