匿名通过本文主要向大家介绍了微信公众平台开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
对于每一个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]
GOwechatapi.aspx页面处理下面信息
2、接收微信发过来的信息
#region 接收微信消息
/// <summary>
/// 接收微信信息
/// </summary>
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 回复消息(微信信息返回)
/// <summary>
/// 回复消息(微信信息返回)
/// </summary>
/// <param name="weixinXML"></param>
private void ResponseMsg(RequestXml requestXml)
{
string resXml = "";
string WeChat_Key = Request.QueryString["key"];
try
{
DataTable dtWeChat = wechatdal.GetList("wechat_key='" + WeChat_Key + "'").Tables[0];
if (dtWeChat.Rows.Count > 0)
{
replyset.User_ID = dtWeChat.Rows[0]["user_id"].ToString();
replyset.WeChat_ID = dtWeChat.Rows[0]["wechat_id"].ToString();
replyset.WeChat_Type = dtWeChat.Rows[0]["wechat_type"].ToString();
replyset.WeChat_Name = dtWeChat.Rows[0]["wechat_name"].ToString();
switch (requestXml.MsgType)
{
//当收到文本信息的时候回复信息
case "text":
resXml = replyset.GetKeyword(requestXml.FromUserName, requestXml.ToUserName, requestXml.Content);
break;
//当接收推送事件时回复的信息
case "event":
switch (requestXml.Event)
{
//关注的时候回复信息
case "subscribe":
resXml = replyset.GetSubscribe(requestXml.FromUserName, requestXml.ToUserName);
break;
//自定义菜单的时候回复信息
case "CLICK":
resXml = replyset.GetMenuClick(requestXml.FromUserName, requestXml.ToUserName, requestXml.EventKey);
break;
}
break;
}
}
}
catch (Exception ex)
{
Writebug("异常:" + ex.Message + "Struck:" + ex.StackTrace.ToString());
}
//发送xml格式的信息到微信中
Response.Write(resXml);
Response.End();
}
#endregion 回复消息(微信信息返回)加载wechatapi.aspx的load时间
protected void Page_Load(object sender, EventArgs e)
{
if (Request.HttpMethod.ToLower() == "post")
{
RequestMsg();
}
else
{
//微信通过get请求验证api接口
CheckWeChat();
}
}reply.cs
public class replyset
{
public string hostUrl = "http://" + HttpContext.Current.Request.Url.Authority; //域名
public string upfileurl = "http://file.api.weixin.qq.com/cgi-bin/media/upload";
public

