.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)
复制代码

    使用示例如下:

    /// <summary>
    /// 按分组群发消息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSendToGroup_Click(object sender, EventArgs e)
    {
        if (rblGroup.SelectedIndex >= 0)
        {
            string userName = lbPublicAccount.SelectedValue;
            ErrorMessage errorMessage;
            bool isToAll = string.IsNullOrWhiteSpace(rblGroup.SelectedValue);
            string groupId = isToAll ? "" : rblGroup.SelectedValue;
            string content = txtContent.Text;
            long msgId = MassMessage.Send(userName, isToAll, groupId, MassMessageTypeEnum.text, content, out errorMessage);
            if (errorMessage.IsSuccess)
            {
                ltrMessage.Text = "群发消息成功。";
                rblMassMessage.Items.Add(new ListItem(string.Format("id:{0},text:{1}", msgId, content), msgId.ToString()));
            }
            else
                ltrMessage.Text = string.Format("群发消息失败。{0}", errorMessage);
        }
    }

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)
复制代码

    使用示例如下:

    /// <summary>
    /// 按用户群发消息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSendToUsers_Click(object sender, EventArgs e)
    {
        if (cblUser.SelectedIndex >= 0)
        {
            string userName = lbPublicAccount.SelectedValue;
            ErrorMessage errorMessage;
            List<string> openIds = new List<string>();
            foreach (ListItem item in cblUser.Items)
            {
                if (item.Selected)
                    openIds.Add(item.Value);
            }
            string content = txtContent.Text;
            long msgId = MassMessage.Send(userName, openIds, MassMessageTypeEnum.text, content, out errorMessage);
            if (errorMessage.IsSuccess)
            {
                ltrMessage.Text = "群发消息成功。";
                rblMassMessage.Items.Add(new ListItem(string.Format("id:{0},text:{1}", msgId, content), msgId.ToString()));
            }
            else
                ltrMessage.Text = string.Format("群发消息失败。{0}", errorMessage);
        }
    }

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

复制代码
/// <summary>
/// 删除群发消息。
/// 注:只能删除图文消息和视频消息。
/// </summary>
/// <param name="userName">公众号</param>
/// <param name="messageId">消息id</param>
/// <returns>返回删除是否成功</returns>
public static ErrorMessage Delete(string userName, long messageId)
复制代码

    使用示例如下:

    /// <summary>
    /// 删除群发消息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnDelete_Click(object sender, EventArgs e)
    {
        if (rblMassMessage.SelectedIndex >= 0)
        {
            string userName = lbPublicAccount.SelectedValue;
            long msgId = long.Parse(rblMassMessage.SelectedValue);
            ErrorMessage errorMessage = MassMessage.Delete(userName, msgId);
            if (errorMessage.IsSuccess)
            {
                ltrMessage.Text = "删除消息成功。";
                rblMassMessage.Items.Remove(rblMassMessage.SelectedItem);
            }
            else
                ltrMessage.Text = string.Format("删除消息失败。{0}", errorMessage);
        }
    }

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)
复制代码

    使用示例如下:

    /// <summary>
    /// 预览群发消息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnPreview_Click(object sender, EventArgs e)
    {
        if (cblUser.SelectedIndex >= 0)
        {
            string userName = lbPublicAccount.SelectedValue;
            ErrorMessage errorMessage;
            string openId = cblUser.SelectedValue;
            string content = txtContent.Text;
            long msgId = MassMessage.Preview(userName, openId, MassMessageTypeEnum.text, content, out errorMessage);
            if (errorMessage.IsSuccess)
            {
                ltrMessage.Text = "预览消息成功。";
                rblMassMessage.Items.Add(new ListItem(string.Format("id:{0},text:{1}", msgId, content), msgId.ToString()));
            }
            else
                ltrMessage.Text = string.Format("预览消息失败。{0}", errorMessage);
        }
    }

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)
复制代码

    使用示例如下:

    /// <summary>
    /// 查询群发消息状态
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnGetStatus_Click(object sender, EventArgs e)
    {
        if (rblMassMessage.SelectedIndex >= 0)
        {
            string userName = lbPublicAccount.SelectedValue;
            ErrorMessage errorMessage;
            long msgId = long.Parse(rblMassMessage.SelectedValue);
            bool success = MassMessage.GetStatus(userName, msgId, out errorMessage);
            if (errorMessage.IsSuccess)
                ltrMessage.Text = string.Format("消息群发{0}。", success ? "成功" : "失败");
            else
                ltrMessage.Text = string.Format("获取消息群发状态失败。{0}", errorMessage);
        }
    }

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ASP.NET微信公众号平台系统源码是一种用于构建微信公众号的框架和代码库。它提供了一系列的接口和功能,帮助开发人员快速地搭建和定制自己的微信公众号平台。 该系统源码基于ASP.NET技术开发,结合微信公众号开放平台的接口和功能进行了集成。它提供了一种便捷的方式,让开发人员可以通过编写少量的代码来实现与微信公众号的交互和功能扩展。 ASP.NET微信公众号平台系统源码具备以下特点和功能: 1. 用户管理:能够管理微信公众号的用户信息,包括用户的基本信息、关注状态、交互记录等。 2. 消息管理:能够接收和发送微信公众号的消息,包括文本消息、图片消息、语音消息、视频消息等。 3. 菜单管理:能够创建和管理微信公众号的自定义菜单,包括点击菜单、跳转链接、触发推送消息等。 4. 接口管理:能够对接微信公众号开放平台的各种接口,包括获取用户信息、发送模板消息、创建二维码等。 5. 素材管理:能够上传和管理微信公众号的素材,包括图文消息、图片、音频、视频等。 6. 数据统计:能够统计微信公众号的用户活跃度、消息互动情况、菜单点击量等数据。 ASP.NET微信公众号平台系统源码的优势在于它具有良好的扩展性和定制性,开发人员可以根据自己的需求进行二次开发和定制。同时,它也提供了一定的安全机制和权限控制,保障了用户信息和数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值