logo科技微讯

微信公众号开发各 API 的关系和使用

作者:科技微讯
日期:2021-01-18
📝 笔记

2024-05-04 更新:不知道从什么时候开始,公众号的“图文素材”功能已经升级为“草稿箱”功能,所以下文提到的 media/uploadnews 接口建议改为 draft/add 接口。

群发图文消息

概览:

  1. 首先,预先将图文消息中需要用到的图片,使用一个叫“上传图文消息内图片”的接口进行上传,上传成功后获得图片 URL;
  2. 上传图文消息(也就是公众号文章),图文中使用的图片请使用第一步获取的图片 URL;
  3. 使用对用户标签的群发,或对 OpenID 列表的群发,将图文消息群发出去,群发时微信会进行原创校验,并返回群发操作结果;
  4. 在上述过程中,如果需要,还可以预览图文消息、查询群发状态,或删除已群发的消息等。

具体:

const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=${ACCESS_TOKEN}`;
  • 把链接用在文章中,用 html 去写文章;
  • media/uploadnews:把文章上传到微信服务器,返回 media_id;
const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=${ACCESS_TOKEN}`;
  • mass/preview:预览文章,可以自动预览给某个微信号;
const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=${ACCESS_TOKEN}`;
  • mass/sendall:发送给所有用户或部分用户,注意图文 media_id 需要通过 media/uploadnews 获取;
const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=${ACCESS_TOKEN}`;
  • 或者 mass/send:发送给指定的 openid 的用户,但是最多只能发送给 10000 个 openid;
const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=${ACCESS_TOKEN}`;
const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=${ACCESS_TOKEN}`;
  • 通过接收事件推送获取发送结果;

群发其他消息

无论是群发图文消息,还是群发图片、视频、语音等消息,关键都是拿到 media_id,上面群发图文消息是通过 media/uploadnews 拿到 media_id,而其他消息类型可以通过素材管理接口拿到 media_id,文档有这些非图文消息的群发说明。

素材管理接口可以分为临时素材管理接口、永久素材管理接口。

新增临时素材

media/upload,媒体文件在微信后台保存时间为 3 天,即 3 天后 media_id 失效。

const ACCESS_TOKEN = "";
const TYPE = "";
const api = `https://api.weixin.qq.com/cgi-bin/media/upload?access_token=${ACCESS_TOKEN}&type=${TYPE}`;

新增永久素材

material/add_news:新增永久图文,貌似下架了?文档找不到这个 API。media/uploadnews 上传的图文消息也是永久。

const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=${ACCESS_TOKEN}`;

media/uploadimg:上传图文消息内的图片获取 URL。

const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=${ACCESS_TOKEN}`;

material/add_material:新增其他类型永久素材,包括图片。

const ACCESS_TOKEN = "";
const TYPE = "";
const api = `https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=${ACCESS_TOKEN}&type=${TYPE}`;

视频 media_id

通过素材管理 API 获取到的图片、语音的 media_id 可以直接用 mass/sendall 推送出去,但是获取到的视频 media_id 不能直接推送出去,还需要用 media/uploadvideo 这个 api 把这个 media_id 转换成另一个 media_id。

const ACCESS_TOKEN = "";
const api = `https://api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token=${ACCESS_TOKEN}`;
//把下面的数据 post 到 api
const body = {
  media_id: "rF4UdIMfYK3efUfyoddYRMU50zMiRmmt_l0kszupYh_SzrcW5Gaheq05p_lHuOTQ",
  title: "TITLE",
  description: "Description",
};
//api 返回的数据,这次拿到的 media_id 才可以群发
const result = {
  type: "video",
  media_id: "IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc",
  created_at: 1398848981,
};

永久素材和临时素材的区别

  • 临时素材:接口返回 media_id,不会返回 url;
  • 临时素材:媒体文件在微信后台保存时间为 3 天,即 3 天后 media_id 失效;
  • 临时素材:图片体积限制 10M,支持 PNG\JPEG\JPG\GIF 格式;
  • 永久素材:
    • media/uploadimg:只返回 url,url 可以在腾讯系域名中使用;
    • material/add_material:返回 media_id 和 url,url 可以在腾讯系域名中使用;
  • 永久素材:
    • media/uploadimg:无数量限制;
    • material/add_material:图文消息素材、图片素材上限为 100000,其他类型为 1000;
  • 永久素材:
    • media/uploadimg:必须在 1MB 以下,且只支持 jpg/png 格式;
    • material/add_material:图片体积 10M,支持 bmp/png/jpeg/jpg/gif 格式;
  • 在公众号后台上传的都是永久素材,图文消息只能作为永久素材增加,不能作为临时素材增加。

API 总结

  • 群发的内容是这样获取 media_id(临时、永久) 的:

    • 文章: media/uploadnewsdraft/add,其中文章内的图片用 media/uploadimg 获取 url;
    • 视频:先 media/uploadmaterial/add_material,再 media/uploadvideo
    • 图片:media/uploadmaterial/add_material
    • 语音:media/uploadmaterial/add_material
  • 发布用 mass/sendallmass/send,传入通过上一个步骤获取 media_id

draft/addmedia/uploadimg 个人无认证的订阅号也可以用,media/uploadnewsmass/sendallmass/send 需要认证才可以用。


相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论