程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .net微信公眾號開發——群發消息,.net公眾群發消息

.net微信公眾號開發——群發消息,.net公眾群發消息

編輯:C#入門知識

.net微信公眾號開發——群發消息,.net公眾群發消息


   本文將介紹微信公眾號開發中用於群發消息的類MassMessage,包括:(1)MassMessage類;(2)群發;(3)刪除;(4)預覽;(5)查詢發送狀態;(6)接收推送群發結果事件。
    源代碼地址:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/tree/master/PublicAccount/MassMessage
    演示地址:http://www.xrwang.net/Example/MassMessage.aspx

1 MassMessage類
    MassMessage靜態類封裝了群發消息相關的方法,如下表:

作用 方法名 群發 Send 刪除 Delete 預覽 Preview 查詢發送狀態 GetStatus

 

2 群發
    公眾號可以按用戶分組群發消息,也可以按用戶的OpenId列表來群發群發消息。
2.1 按用戶分組群發消息
    方法定義如下:

復制代碼
/// <summary>
/// 根據分組群發消息
/// </summary>
/// <param name="userName">公眾號</param>
/// <param name="isToAll">是否群發給所有用戶</param>
/// <param name="groupId">如果群發給所有用戶,忽略該參數;否則群發給該組中的用戶</param>
/// <param name="messageType">群發消息類型</param>
/// <param name="mediaIdOrContent">多媒體id或者文本內容</param>
/// <param name="errorMessage">返回發送是否成功</param>
/// <returns>如果發送成功,返回消息ID;否則,返回-1。</returns>
public static long Send(string userName, bool isToAll, string groupId, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)
復制代碼

    使用示例如下:

 

[csharp] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2. /// 按分組群發消息  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. protected void btnSendToGroup_Click(object sender, EventArgs e)  
  7. {  
  8.     if (rblGroup.SelectedIndex >= 0)  
  9.     {  
  10.         string userName = lbPublicAccount.SelectedValue;  
  11.         ErrorMessage errorMessage;  
  12.         bool isToAll = string.IsNullOrWhiteSpace(rblGroup.SelectedValue);  
  13.         string groupId = isToAll ? "" : rblGroup.SelectedValue;  
  14.         string content = txtContent.Text;  
  15.         long msgId = MassMessage.Send(userName, isToAll, groupId, MassMessageTypeEnum.text, content, out errorMessage);  
  16.         if (errorMessage.IsSuccess)  
  17.         {  
  18.             ltrMessage.Text = "群發消息成功。";  
  19.             rblMassMessage.Items.Add(new ListItem(string.Format("id:{0},text:{1}", msgId, content), msgId.ToString()));  
  20.         }  
  21.         else  
  22.             ltrMessage.Text = string.Format("群發消息失敗。{0}", errorMessage);  
  23.     }  
  24. }  

 

 

2.2 按OpenId列表群發

    方法定義如下:

復制代碼
/// <summary>
/// 根據OpenId列表群發消息
/// </summary>
/// <param name="userName">公眾號</param>
/// <param name="tousers">OpenId列表</param>
/// <param name="messageType">群發消息類型</param>
/// <param name="mediaIdOrContent">多媒體id或者文本內容</param>
/// <param name="errorMessage">返回發送是否成功</param>
/// <returns>如果發送成功,返回消息ID;否則,返回-1。</returns>
public static long Send(string userName, IEnumerable<string> tousers, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)
復制代碼

    使用示例如下:

 

[csharp] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2. /// 按用戶群發消息  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. protected void btnSendToUsers_Click(object sender, EventArgs e)  
  7. {  
  8.     if (cblUser.SelectedIndex >= 0)  
  9.     {  
  10.         string userName = lbPublicAccount.SelectedValue;  
  11.         ErrorMessage errorMessage;  
  12.         List<string> openIds = new List<string>();  
  13.         foreach (ListItem item in cblUser.Items)  
  14.         {  
  15.             if (item.Selected)  
  16.                 openIds.Add(item.Value);  
  17.         }  
  18.         string content = txtContent.Text;  
  19.         long msgId = MassMessage.Send(userName, openIds, MassMessageTypeEnum.text, content, out errorMessage);  
  20.         if (errorMessage.IsSuccess)  
  21.         {  
  22.             ltrMessage.Text = "群發消息成功。";  
  23.             rblMassMessage.Items.Add(new ListItem(string.Format("id:{0},text:{1}", msgId, content), msgId.ToString()));  
  24.         }  
  25.         else  
  26.             ltrMessage.Text = string.Format("群發消息失敗。{0}", errorMessage);  
  27.     }  
  28. }  

 

 

3 刪除群發
    刪除已群發消息的方法定義如下:

復制代碼
/// <summary>
/// 刪除群發消息。
/// 注:只能刪除圖文消息和視頻消息。
/// </summary>
/// <param name="userName">公眾號</param>
/// <param name="messageId">消息id</param>
/// <returns>返回刪除是否成功</returns>
public static ErrorMessage Delete(string userName, long messageId)
復制代碼

    使用示例如下:

 

[csharp] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2. /// 刪除群發消息  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. protected void btnDelete_Click(object sender, EventArgs e)  
  7. {  
  8.     if (rblMassMessage.SelectedIndex >= 0)  
  9.     {  
  10.         string userName = lbPublicAccount.SelectedValue;  
  11.         long msgId = long.Parse(rblMassMessage.SelectedValue);  
  12.         ErrorMessage errorMessage = MassMessage.Delete(userName, msgId);  
  13.         if (errorMessage.IsSuccess)  
  14.         {  
  15.             ltrMessage.Text = "刪除消息成功。";  
  16.             rblMassMessage.Items.Remove(rblMassMessage.SelectedItem);  
  17.         }  
  18.         else  
  19.             ltrMessage.Text = string.Format("刪除消息失敗。{0}", errorMessage);  
  20.     }  
  21. }  

 

 

4 預覽群發
    預覽群發消息的方法定義如下:

復制代碼
/// <summary>
/// 預覽群發消息
/// </summary>
/// <param name="userName">公眾號</param>
/// <param name="touser">OpenId</param>
/// <param name="messageType">群發消息類型</param>
/// <param name="mediaIdOrContent">多媒體id或者文本內容</param>
/// <param name="errorMessage">返回發送是否成功</param>
/// <returns>如果發送成功,返回消息ID;否則,返回-1。</returns>
public static long Preview(string userName, string touser, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)
復制代碼

    使用示例如下:

 

[csharp] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2. /// 預覽群發消息  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. protected void btnPreview_Click(object sender, EventArgs e)  
  7. {  
  8.     if (cblUser.SelectedIndex >= 0)  
  9.     {  
  10.         string userName = lbPublicAccount.SelectedValue;  
  11.         ErrorMessage errorMessage;  
  12.         string openId = cblUser.SelectedValue;  
  13.         string content = txtContent.Text;  
  14.         long msgId = MassMessage.Preview(userName, openId, MassMessageTypeEnum.text, content, out errorMessage);  
  15.         if (errorMessage.IsSuccess)  
  16.         {  
  17.             ltrMessage.Text = "預覽消息成功。";  
  18.             rblMassMessage.Items.Add(new ListItem(string.Format("id:{0},text:{1}", msgId, content), msgId.ToString()));  
  19.         }  
  20.         else  
  21.             ltrMessage.Text = string.Format("預覽消息失敗。{0}", errorMessage);  
  22.     }  
  23. }  

 

 

5 查詢群發消息發送狀態
    查詢群發消息發送狀態的方法定義如下:

復制代碼
/// <summary>
/// 查詢群發消息的發送狀態
/// </summary>
/// <param name="userName">公眾號</param>
/// <param name="messageId">消息id</param>
/// <param name="errorMessage">返回查詢是否成功</param>
/// <returns>返回消息是否發送成功</returns>
public static bool GetStatus(string userName, long messageId, out ErrorMessage errorMessage)
復制代碼

    使用示例如下:

 

[csharp] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2. /// 查詢群發消息狀態  
  3. /// </summary>  
  4. /// <param name="sender"></param>  
  5. /// <param name="e"></param>  
  6. protected void btnGetStatus_Click(object sender, EventArgs e)  
  7. {  
  8.     if (rblMassMessage.SelectedIndex >= 0)  
  9.     {  
  10.         string userName = lbPublicAccount.SelectedValue;  
  11.         ErrorMessage errorMessage;  
  12.         long msgId = long.Parse(rblMassMessage.SelectedValue);  
  13.         bool success = MassMessage.GetStatus(userName, msgId, out errorMessage);  
  14.         if (errorMessage.IsSuccess)  
  15.             ltrMessage.Text = string.Format("消息群發{0}。", success ? "成功" : "失敗");  
  16.         else  
  17.             ltrMessage.Text = string.Format("獲取消息群發狀態失敗。{0}", errorMessage);  
  18.     }  
  19. }  

 

 

6 接收推送群發結果事件
    群發消息之後,微信服務器會推送群發的結果到公眾號的指定URL上,公眾號服務器會接收到一條RequestMassSendJobFinishMessage類型的請求消息。
    RequestMassSendJobFinishMessage類有以下只讀屬性:

復制代碼
        /// <summary>
        /// 獲取消息id
        /// </summary>
        public long MsgID { get; private set; }
        /// <summary>
        /// 獲取群發消息的結果
        /// </summary>
        public string Status { get; private set; }
        /// <summary>
        /// 獲取用戶總數
        /// </summary>
        public int TotalCount { get; private set; }
        /// <summary>
        /// 獲取過濾後待發送的用戶數
        /// </summary>
        public int FilterCount { get; private set; }
        /// <summary>
        /// 獲取發送成功的用戶數
        /// </summary>
        public int SentCount { get; private set; }
        /// <summary>
        /// 獲取發送失敗的用戶數
        /// </summary>
        public int ErrorCount { get; private set; }

        /// <summary>
        /// 獲取消息是否群發成功
        /// </summary>
        public bool SendSuccess
        {
            get
            {
                return Status == sendSuccess;
            }
        }
        /// <summary>
        /// 獲取發送失敗的原因
        /// </summary>
        public string ErrorReason
        {
            get
            {
                string reason = string.Empty;
                if (Status == sendSuccess)
                    reason = "發送成功";
                else if (Status == sendFailed)
                    reason = "發送失敗";
                else if (errorDict.ContainsKey(Status))
                    reason = errorDict[Status];
                return reason;
            }
        }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved