博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net微信公众号开发——群发消息
阅读量:6974 次
发布时间:2019-06-27

本文共 6421 字,大约阅读时间需要 21 分钟。

   本文将介绍微信公众号开发中用于群发消息的类MassMessage,包括:(1)MassMessage类;(2)群发;(3)删除;(4)预览;(5)查询发送状态;(6)接收推送群发结果事件。

    源代码地址:
    演示地址:

1 MassMessage类

    MassMessage静态类封装了群发消息相关的方法,如下表:

作用 方法名
群发 Send
删除 Delete
预览 Preview
查询发送状态 GetStatus

 

2 群发

    公众号可以按用户分组群发消息,也可以按用户的OpenId列表来群发群发消息。
2.1 按用户分组群发消息
    方法定义如下:

/// /// 根据分组群发消息/// /// 公众号/// 是否群发给所有用户/// 如果群发给所有用户,忽略该参数;否则群发给该组中的用户/// 群发消息类型/// 多媒体id或者文本内容/// 返回发送是否成功/// 
如果发送成功,返回消息ID;否则,返回-1。
public static long Send(string userName, bool isToAll, string groupId, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)

    使用示例如下:

 

[csharp]
 
  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列表群发

    方法定义如下:

/// /// 根据OpenId列表群发消息/// /// 公众号/// OpenId列表/// 群发消息类型/// 多媒体id或者文本内容/// 返回发送是否成功/// 
如果发送成功,返回消息ID;否则,返回-1。
public static long Send(string userName, IEnumerable
tousers, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)

    使用示例如下:

 

[csharp]
 
  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 删除群发

    删除已群发消息的方法定义如下:

/// /// 删除群发消息。/// 注:只能删除图文消息和视频消息。/// /// 公众号/// 消息id/// 
返回删除是否成功
public static ErrorMessage Delete(string userName, long messageId)

    使用示例如下:

 

[csharp]
 
  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 预览群发

    预览群发消息的方法定义如下:

/// /// 预览群发消息/// /// 公众号/// OpenId/// 群发消息类型/// 多媒体id或者文本内容/// 返回发送是否成功/// 
如果发送成功,返回消息ID;否则,返回-1。
public static long Preview(string userName, string touser, MassMessageTypeEnum messageType, string mediaIdOrContent, out ErrorMessage errorMessage)

    使用示例如下:

 

[csharp]
 
  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 查询群发消息发送状态

    查询群发消息发送状态的方法定义如下:

/// /// 查询群发消息的发送状态/// /// 公众号/// 消息id/// 返回查询是否成功/// 
返回消息是否发送成功
public static bool GetStatus(string userName, long messageId, out ErrorMessage errorMessage)

    使用示例如下:

 

[csharp]
 
  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类有以下只读属性:

///         /// 获取消息id        ///         public long MsgID { get; private set; }        ///         /// 获取群发消息的结果        ///         public string Status { get; private set; }        ///         /// 获取用户总数        ///         public int TotalCount { get; private set; }        ///         /// 获取过滤后待发送的用户数        ///         public int FilterCount { get; private set; }        ///         /// 获取发送成功的用户数        ///         public int SentCount { get; private set; }        ///         /// 获取发送失败的用户数        ///         public int ErrorCount { get; private set; }        ///         /// 获取消息是否群发成功        ///         public bool SendSuccess        {            get            {                return Status == sendSuccess;            }        }        ///         /// 获取发送失败的原因        ///         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;            }        }

转载地址:http://qzrsl.baihongyu.com/

你可能感兴趣的文章
纯链式golang http请求库, 支持HTTP代理
查看>>
类的扩充 js中面向对象的技术
查看>>
css 3D动画
查看>>
一名3年工作经验的java程序员应该具备的职业技能
查看>>
基于CRA,使用Redux、Router、Sass等快速搭建纯前端React项目
查看>>
机器喵之红黑树(一)
查看>>
Saltstack 安装配置详解
查看>>
【Tomcat】IDEA下跟踪查看源码
查看>>
Java多线程进阶(三)—— J.U.C之locks框架:ReentrantLock
查看>>
Echarts-百度地图省分着色
查看>>
你不知道的JavaScript :值
查看>>
基于gokit的微服务项目骨架ko
查看>>
Makefile简介
查看>>
《前端竹节》(2)【正则表达式】
查看>>
ECMAScript 6 学习之路 ( 一 )
查看>>
完全使用 Docker 开发 PHP 项目 (三): 命令容器化
查看>>
android综合资讯App、自定义悬浮框、屏幕助手、空灵音乐源码等
查看>>
Vue全局异常捕获
查看>>
详解CommonsChunkPlugin的配置和用法
查看>>
awk 入坑指北
查看>>