使用 Senparc 群发图文消息(测试公众号暂不支持)
功能说明
群发图文消息需要先构建图文素材(News),上传后获取 media_id,再通过群发接口下发。本节在原有 SendGroupMessage 方法中新增 ResponseMsgType.News 分支,实现图文消息的群发。
注意:微信公众平台测试账号不支持群发图文消息,调用时会报权限错误(如
45028或48001)。以下代码需在认证服务号或认证订阅号环境下测试。
实现代码
case ResponseMsgType.News:
{
// 1. 上传封面图片(临时素材)
UploadTemporaryMediaResult mediaResultImage = MediaApi.UploadTemporaryMedia(
accessToken,
UploadMediaFileType.image,
imgFilePath
);
// 2. 构建图文消息数组(最多 8 条)
NewsModel[] newsModels = new NewsModel[5];
for (int i = 0; i < 5; i++)
{
newsModels[i] = new NewsModel();
newsModels[i].title = "标题" + i;
newsModels[i].author = "作者";
newsModels[i].thumb_media_id = mediaResultImage.media_id; // 封面图片 media_id
newsModels[i].show_cover_pic = "1"; // 是否显示封面,0-不显示,1-显示
newsModels[i].content = "<p>内容</p>"; // 图文内容,支持 HTML
newsModels[i].content_source_url = "http://www.bamn.cn"; // 点击跳转链接
newsModels[i].digest = "描述"; // 摘要
}
// 3. 上传图文素材(临时)
var mediaResultNews = MediaApi.UploadTemporaryNews(accessToken, 10000, newsModels);
// 4. 群发图文消息
result = GroupMessageApi.SendGroupMessageByGroupId(
accessToken,
groupId.ToString(),
mediaResultNews.media_id,
GroupMessageType.mpnews, // 注意:图文群发类型为 mpnews
isToAll
);
break;
}Code language: JavaScript (javascript)
关键点说明
NewsModel属性说明:title:标题,不超过 64 字节author:作者,不超过 64 字节thumb_media_id:封面图片的media_id,必须是临时素材或永久素材的 image 类型show_cover_pic:是否显示封面,字符串"0"或"1"content:图文内容,支持 HTML 标签content_source_url:点击”阅读原文”跳转的链接digest:摘要,不填则默认从内容中提取前 54 字节
MediaApi.UploadTemporaryNews():上传图文素材,返回media_id,有效期 3 天。- 第二个参数为
timeOut,单位毫秒,可设为10000。
- 第二个参数为
GroupMessageType.mpnews:图文消息的群发类型枚举值,不要误用news或其他。- 图文消息一次最多包含 8 条
NewsModel。
常见错误与修正
| 问题 | 说明 | 修正 |
|---|---|---|
show_cover_pic 赋值 URL | 该字段应为 "0" 或 "1",不是图片地址 | 改为 newsModels[i].show_cover_pic = "1"; |
使用 GroupMessageType.news | 图文群发正确枚举为 mpnews | 改为 GroupMessageType.mpnews |
| 测试号调用 | 测试号无群发图文权限 | 使用认证服务号测试 |
封面图片用 UploadImg 返回的 URL | thumb_media_id 需要的是 media_id,不是图片 URL | 使用 UploadTemporaryMedia 或 UploadForeverMedia 上传图片获取 media_id |
群发图文消息完整流程
- 准备封面图片,上传为临时素材,获取
media_id - 构建
NewsModel数组,设置标题、内容、封面等 - 调用
MediaApi.UploadTemporaryNews上传图文素材 - 调用
GroupMessageApi.SendGroupMessageByGroupId群发
错误码速查
| 错误码 | 含义 |
|---|---|
| 45028 | 没有群发配额(测试号/未认证号) |
| 48001 | 接口未授权(账号类型不支持) |
| 40007 | media_id 不合法 |
| 45065 | clientmsgid exist(去重标识重复) |
Previous: 使用 Senparc 群发图片消息
Next: 了解菜单的事件机制和关注/扫描事件推送