- 首先在微信公众号平台配置关注返回链接
- Post获取微信公众号返回的数据(返回是一个XML数据)
Private string PostInput()
{
Stream s = System.Web.HttpContext.Current.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
return Encoding.UTF8.GetString(b);
}
- 接受信息的token类和填充方法
Private class ExmlMsg
{
/// <summary>
/// 本公众账号
/// </summary>
public string ToUserName { get; set; }
/// <summary>
/// 用户账号
/// </summary>
public string FromUserName { get; set; }
/// <summary>
/// 发送时间戳
/// </summary>
public string CreateTime { get; set; }
/// <summary>
/// 发送的文本内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 消息的类型
/// </summary>
public string MsgType { get; set; }
/// <summary>
/// 事件名称
/// </summary>
public string EventName { get; set; }
}
private ExmlMsg GetExmlMsg(XmlElement root)
{
ExmlMsg xmlMsg = new ExmlMsg()
{
FromUserName = root.SelectSingleNode("FromUserName").InnerText,
ToUserName = root.SelectSingleNode("ToUserName").InnerText,
CreateTime = root.SelectSingleNode("CreateTime").InnerText,
MsgType = root.SelectSingleNode("MsgType").InnerText,
};
if (xmlMsg.MsgType.Trim().ToLower() == "text")
{
xmlMsg.Content = root.SelectSingleNode("Content").InnerText;
}
else if (xmlMsg.MsgType.Trim().ToLower() == "event")
{
xmlMsg.EventName = root.SelectSingleNode("Event").InnerText;
}
return xmlMsg;
}
- 配置接受文本的信息(这里适用于XML数据)
private void textCase(ExmlMsg xmlMsg)
{
int nowtime = ConvertDateTimeInt(DateTime.Now);
string msg = "";
msg = getText(xmlMsg);
string resxml = "<xml><ToUserName><![CDATA[" + xmlMsg.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + xmlMsg.ToUserName + "]]></FromUserName><CreateTime>" + nowtime + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + msg + "]]></Content><FuncFlag>0</FuncFlag></xml>";
Response.Write(resxml);
return;
}
- 返回int的时间戳
private int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
- 实际在公众号中返回的信息
private string getText(ExmlMsg xmlMsg)
{
System.Text.StringBuilder retsb = new StringBuilder(200);
retsb.Append("感谢您关注本公众号 ");
return retsb.ToString();
}
- 最后post获取信息。找到当返回信息中名称为“subscribe”字段的数据进行操作
if (Request.HttpMethod.ToLower() == "post")
{
string postStr = "";
postStr = PostInput();//获取xml数据
string weixin = "";
weixin = postStr;//获取xml数据
if (!string.IsNullOrEmpty(postStr) && !string.IsNullOrEmpty(weixin))
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(weixin);//读取xml字符串
//公众号发消息
XmlElement root = doc.DocumentElement;
ExmlMsg xmlMsg = GetExmlMsg(root);
XmlNodeList list = doc.GetElementsByTagName("xml");
XmlNode xn = list[0];
if (xn.SelectSingleNode("//Event").InnerText == "subscribe")
{
textCase(xmlMsg);
}
}
}