现在用微信公共平台的比较多,特封装一个微信的API类,方便调用。支持最新版4.5的5种推送消息类型和3种回复消息类型。对基本的请求验证和通过验证,接受消息和回复消息都有静态方法实现,不用再手工去做了。
using System;using System.Collections.Generic;using System.Xml;namespace WeiXinAPI{  public class NewsReplyMessage : Message  {    public List<Article> Articles;    public NewsReplyMessage()    {      MsgType = MessageType.News;      Direction = MessageDirection.Reply;      FuncFlag = "1";    }    public int ArticleCount    {      get { return Articles == null ? 0 : Articles.Count; }    }    public string FuncFlag { get; set; }    public override bool Parse(string xmlMessageString)    {      //空消息      if (string.IsNullOrEmpty(xmlMessageString))      {        return false;      }      //获取消息内容      try      {        var xmlDocument = new XmlDocument();        xmlDocument.LoadXml(xmlMessageString);        XmlNode firstNode = xmlDocument.FirstChild;        if (firstNode != null)        {          //消息类型          XmlNode tempNode = firstNode.SelectSingleNode("MsgType");          if (tempNode == null) return false;          MsgType = tempNode.InnerText;          //发送者          tempNode = firstNode.SelectSingleNode("FromUserName");          if (tempNode == null) return false;          FromUserName = tempNode.InnerText;          //接收者          tempNode = firstNode.SelectSingleNode("ToUserName");          if (tempNode == null) return false;          ToUserName = tempNode.InnerText;          //创建时间          tempNode = firstNode.SelectSingleNode("CreateTime");          if (tempNode == null) return false;          CreateTime = Convert.ToInt64(tempNode.InnerText);          //Articles          tempNode = firstNode.SelectSingleNode("Articles");          if (tempNode != null)          {            if (tempNode.HasChildNodes)            {              Articles = new List<Article>();              foreach (XmlNode xmlNode in tempNode.ChildNodes)              { XmlNode tmpNode = xmlNode.SelectSingleNode("Title"); if (tmpNode == null) return false; string title = tempNode.InnerText; tmpNode = xmlNode.SelectSingleNode("Discription"); if (tmpNode == null) return false; string description = tempNode.InnerText; tmpNode = xmlNode.SelectSingleNode("PicUrl"); if (tmpNode == null) return false; string picUrl = tempNode.InnerText; tmpNode = xmlNode.SelectSingleNode("Url"); if (tmpNode == null) return false; string url = tempNode.InnerText; Articles.Add(new Article(title, description, picUrl, url));              }            }          }          //星标(FuncFlag=1时星标消息)          tempNode = firstNode.SelectSingleNode("FuncFlag");          if (tempNode == null) return false;          FuncFlag = tempNode.InnerText;          return true;        }        return false;      }      catch      {        return false;      }    }    public override string ToString()    {      string result = string.Format("<xml>"  Environment.NewLine       "<ToUserName><![CDATA[{0}]]></ToUserName>"  Environment.NewLine       "<FromUserName><![CDATA[{1}]]></FromUserName>"  Environment.NewLine       "<CreateTime>{2}</CreateTime>"  Environment.NewLine       "<MsgType><![CDATA[{3}]]></MsgType>"  Environment.NewLine       "<ArticleCount>{4}</ArticleCount>"  Environment.NewLine, ToUserName,      FromUserName, CreateTime, MsgType, ArticleCount);      if (Articles.Count > 0)      {        result = "<Articles>"  Environment.NewLine;        foreach (Article article in Articles)        {          result = "<item>"  Environment.NewLine "<Title><![CDATA["  article.Title  "]]></Title>"  Environment.NewLine "<Discription><![CDATA["  article.Description  "]]></Discription>" Environment.NewLine "<PicUrl><![CDATA["  article.PicUrl  "]]></PicUrl>"  Environment.NewLine "<Url><![CDATA["  article.Url  "]]></Url>"  Environment.NewLine "</item>"  Environment.NewLine;        }        result = "</Articles>"  Environment.NewLine;      }      result = "<FuncFlag>"  FuncFlag  "</FuncFlag>"  Environment.NewLine  "</xml>";      return result;    }  }}

 
  
					
				
评论