当前位置: 移动技术网 > IT编程>开发语言>.net > .net微信公众号开发——群发消息

.net微信公众号开发——群发消息

2018年01月29日  | 移动技术网IT编程  | 我要评论
  本文将介绍微信公众号开发中用于群发消息的类MassMessage,包括:(1)MassMessage类;(2)群发;(3)删除;(4)预览;(5)查询发送状态;(6

 
本文将介绍微信公众号开发中用于群发消息的类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)
 

使用示例如下:

 

    /// 
    /// 按分组群发消息
    /// 
    ///
    ///
    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列表群发

方法定义如下:

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

使用示例如下:

 

    /// 
    /// 按用户群发消息
    /// 
    ///
    ///
    protected void btnSendToUsers_Click(object sender, EventArgs e)
    {
        if (cblUser.SelectedIndex >= 0)
        {
            string userName = lbPublicAccount.SelectedValue;
            ErrorMessage errorMessage;
            List openIds = new List();
            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 删除群发
删除已群发消息的方法定义如下:

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

使用示例如下:

 

    /// 
    /// 删除群发消息
    /// 
    ///
    ///
    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 预览群发
预览群发消息的方法定义如下:

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

使用示例如下:

 

    /// 
    /// 预览群发消息
    /// 
    ///
    ///
    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 查询群发消息发送状态
查询群发消息发送状态的方法定义如下:

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

使用示例如下:

 

    /// 
    /// 查询群发消息状态
    /// 
    ///
    ///
    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类有以下只读属性:

 
        /// 
        /// 获取消息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;
            }
        }
 

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网