最近咨詢微信的人很多,感覺這塊也是一塊商機,也為了演示SNF快速開發平台的優勢,就用SNF快速開發平台開發出一套微信應用程序。使用《SNF.CodeGenerator》代碼生成工具可以節省大量時間。
在前面兩篇兩篇隨筆《C#-MVC開發微信應用(1)--開始使用微信接口》和《C#-MVC開發微信應用(2)--開始使用微信接口》里面,大致介紹了我微信應用的框架構建,本隨筆繼續介紹這一主題,介紹消息應答里面的文本應答和圖文應答的過程。
我們知道,給手機用戶發送響應消息,它可以分為好多種方式,如回復文本消息、回復圖片消息、回復語音消息、回復視頻消息、回復音樂消息、回復圖文消息等,如下所示。
而其中圖片、視頻、語音這三種方式,是需要開通微信認證才可以向用戶發送存在微信服務器上的媒體信息,一般沒有認證的公眾號或者服務號,是不能發送這幾種內容的。
1、實體信息關系及定義
在上一篇微信開發的隨筆中,我展示了對接收消息和回復消息的應用實體類,這些實體類是我根據需要,根據開發需要,在應用層面對它們進行了封裝,如回復的消息關系如下所示。
消息基類BaseMessage的實體類定義如下所示,它對日期構造了一個整形數值,並具備了一些常規的屬性,並且還有一個重要的ToXML方法,用來給方法傳遞這些XML數據的。
/// <summary> /// 基礎消息內容 /// </summary> [XmlRoot(ElementName = "xml")] public class BaseMessage { /// <summary> /// 初始化一些內容,如創建時間為整形, /// </summary> public BaseMessage() { this.CreateTime = BusinessLogic.ConvertDateTimeInt(DateTime.Now); } /// <summary> /// 開發者微信號 /// </summary> public string ToUserName { get; set; } /// <summary> /// 發送方帳號(一個OpenID) /// </summary> public string FromUserName { get; set; } /// <summary> /// 消息創建時間 (整型) /// </summary> public int CreateTime { get; set; } /// <summary> /// 消息類型 /// </summary> public string MsgType { get; set; } public virtual string ToXml() { this.CreateTime = BusinessLogic.ConvertDateTimeInt(DateTime.Now);//重新更新 return XmlHelper.ObjectToXml(this); } }
回復的文本消息實體類代碼如下所示,我們可以看到,它繼承了很多通用的實體屬性,並且還具備了一個ToXml的通用方法,我們需要把它轉換為響應的XML的時候,就使用這個方法就可以了。
/// <summary>
/// 回復文本消息
/// </summary>
[System.Xml.Serialization.XmlRoot(ElementName = "xml")]
public class ResponseText : BaseMessage
{
public ResponseText()
{
this.MsgType = ResponseMsgType.Text.ToString().ToLower();
}
public ResponseText(BaseMessage info)
: this()
{
this.FromUserName = info.ToUserName;
this.ToUserName = info.FromUserName;
}
/// <summary>
/// 內容 消息內容,大小限制在2048字節,字段為空為不合法請求
/// </summary>
public string Content { get; set; }
/// <summary>
/// 星標字段
/// </summary>
public string FuncFlag = "0";//{ get; set; }
}
而圖文消息對象類ResponseNews,它包含更多的信息定義
/// <summary> /// 回復圖文消息 /// </summary> [System.Xml.Serialization.XmlRoot(ElementName = "xml")] public class ResponseNews : BaseMessage { public ResponseNews() { this.MsgType = ResponseMsgType.News.ToString().ToLower(); this.Articles = new List<ArticleEntity>(); } public ResponseNews(BaseMessage info) : this() { this.FromUserName = info.ToUserName; this.ToUserName = info.FromUserName; } /// <summary> /// 圖文消息個數,限制為10條以內 /// </summary> public int ArticleCount { get { return this.Articles.Count; } set { ;//增加這個步驟才出來XML內容 } } /// <summary> /// 圖文列表。 /// 多條圖文消息信息,默認第一個item為大圖,注意,如果圖文數超過10,則將會無響應 /// </summary> [System.Xml.Serialization.XmlArrayItem("item")] public List<ArticleEntity> Articles { get; set; } ///// <summary> ///// 星標字段 ///// </summary> //public string FuncFlag = "0";//{ get; set; } }
而其中的圖文列表集合中的對象,它也是一個實體類型,包含了一些圖文的鏈接,標題等信息,不在贅述。
2、消息的回復處理
如對於文本消息,我們可以用以下的方式進行處理。
//01.文本信息 //ResponseText response = new ResponseText(info); //response.Content = "抱歉,抱歉此功能就不給你用。"; //02.圖片信息 //ResponseImage response = new ResponseImage(info); //response.Image.MediaId = "hlTgQw3xRqAFw9hj0x8eGxhlGzenpq4XQ-ntSSjEMt0XvFdvp3uTcPNmOBA_hOfy"; //string str = response.ToXml();
對於圖文消息,我們可能需要錄入更多的消息才能返回更好的效果。
注意圖文的消息,圖片的尺寸最好按照官方的標准,否則在手機上看起來不好看,官方的標准好像是寬高是(360,200)像素
//使用在微信平台上的圖文信息(單圖文信息) ResponseNews response = new ResponseNews(info); ArticleEntity entity = new ArticleEntity(); entity.Title = "北斗集團"; entity.Description = "歡迎關注北斗集團--專業的單位信息化軟件和軟件開發框架提供商"; entity.PicUrl = "https://images0.cnblogs.com/blog/48652/201501/051238582343793.jpg"; entity.Url = "http://www.cnblogs.com/spring_wang"; response.Articles.Add(entity); result = response.ToXml(); return result;
我們來看看我公司的微信門戶菜單,看起來是不是很酷呢。
對於這兩種(文本消息、圖文消息)用的地方是最多,很多微信門戶,都主要是使用這兩種方式進行響應。當然,我們還可以根據客戶手機提交上來的各種消息進行不同的處理,請求消息的類型我在上一篇的隨筆有介紹,如下所示。
需要關注了解整體效果,可以使用微信直接掃描二維碼即可。
作者: 王春天 2015-12-27
作者Blog:http://www.cnblogs.com/spring_wang 出處: http://www.cnblogs.com/spring_wang/p/5074228.html
如果覺得還不錯,歡迎轉載。