使用 Senparc 群发文本消息
功能说明
Senparc 为微信公众平台的群发消息功能封装了 GroupMessageApi,可以方便地实现按分组群发文本、图文、图片、语音、视频等类型的内容。本节以群发文本消息为例进行说明。
实现代码
/// <summary>
/// 群发消息
/// </summary>
/// <param name="type">
/// 群发类型:Text = 0, News = 1, Music = 2, Image = 3, Voice = 4, Video = 5
/// </param>
/// <param name="groupId">要发送的用户分组ID,发给所有用户时可不输入</param>
/// <returns>返回消息ID</returns>
public string SendGroupMessage(int type, int groupId = -1)
{
var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret);
SendResult result = null;
bool isToAll = (groupId == -1);
string imgFilePath = Server.MapPath("~/logo.png");
switch ((ResponseMsgType)type)
{
case ResponseMsgType.Text:
result = GroupMessageApi.SendGroupMessageByGroupId(
accessToken,
groupId.ToString(),
"测试的群发文本内容---来自北盟网校",
GroupMessageType.text,
isToAll
);
break;
}
return result.errcode + "-" + result.errmsg;
}Code language: PHP (php)
关键点说明
GroupMessageApi.SendGroupMessageByGroupId():按用户分组群发消息的核心方法。accessToken:接口调用凭证groupId:分组 ID,字符串类型;当isToAll = true时此参数可为空- 第三个参数:消息内容(文本类型时直接传字符串)
GroupMessageType.text:指定群发类型为文本isToAll:是否向全部用户发送(true时忽略groupId)
SendResult:返回结果对象,包含以下属性:errcode:错误码,0表示成功errmsg:错误信息,"ok"表示成功msg_id:消息 ID,可用于后续查询群发状态msg_data_id:消息数据 ID(图文消息特有)
isToAll设为true时,消息将发送给所有关注者;设为false时仅发送给指定分组。
权限与限制
| 账号类型 | 群发权限 |
|---|---|
| 认证服务号 | 支持按分组群发、按标签群发、全部发送 |
| 未认证订阅号 | 仅支持每天 1 次群发,且只能发送给全部用户 |
| 测试账号 | 通常无群发权限,调用会报 45028 |
注意:未认证订阅号调用
SendGroupMessageByGroupId指定分组时可能失败,需使用全部发送接口。测试账号基本无法群发,仅可用于接口调试。
常见错误码
| 错误码 | 说明 |
|---|---|
| 45028 | 没有群发配额(测试号/未认证号常见) |
| 45029 | 群发速度过快,请稍后再试 |
| 45030 | 消息内容过长 |
| 45031 | 同一用户 24 小时内只能接收 1 条群发消息 |
扩展思路
- 可结合前面获取用户分组(第 14 节)的功能,实现按分组精准推送
- 群发前可先调用
Preview接口向指定 openid 发送预览,确认内容无误 - 群发后可通过
GetGroupMessageResult查询发送状态

Previous: 上传永久素材(图片)
Next: 使用 Senparc 群发图片消息