本文將介紹微信公眾號開發中用於群發消息的類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靜態類封裝了群發消息相關的方法,如下表:
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
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
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
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
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
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;
}
}