logo科技微讯

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

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

群发图文消息

概览:

  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;
  • 临时素材:媒体文件在微信后台保存时间为 3 天,即 3 天后 media_id 失效;
  • 临时素材:图片体积限制 10M,支持 PNG\JPEG\JPG\GIF 格式;
  • 永久素材:接口返回 media_id 和 URL,其中 url 可以在腾讯系域名中使用;
  • 永久素材:有数量限制,图文消息素材、图片素材上限为 100000,其他类型为 1000;
  • 永久素材:图片体积 10M,支持 bmp/png/jpeg/jpg/gif 格式;
  • 在公众号后台上传的好像都是永久素材,图文消息只能作为永久素材增加,不能作为临时素材增加。

API 总结

  • 临时素材都是 media/upload 上传,注意和图文相关的 media/uploadimgmedia/uploadnews 区分,后两个是永久;

  • 永久素材主要是 material/add_material,图文的 media/uploadimgmedia/uploadnews 也是永久,图文的 material/add_news 也是,不过疑似下架;

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

    • 文章: media/uploadnews,其中文章内的图片用 media/uploadimg 获取 url,不用 material/add_news,因为疑似下架;
    • 视频:先 media/uploadmaterial/add_material,再 media/uploadvideo
    • 图片:media/uploadmaterial/add_material
    • 语音:media/uploadmaterial/add_material
  • 发布用 mass/sendall,传入通过上一个步骤获取 media_id

所以无非就是 material/media/mass/ 三类 api,其中 material 后面都有 add,media 后面都有 upload。media/uploadimgmaterial/add_material 都可以返回 URL,返回 URL 的可能就是永久素材吧。

注意 media/uploadnewsmedia/uploadimgmass/send 等接口需要认证过的公众号才能用。

有一个问题,通过 media/uploadnewsmaterial/add_news 获取的 media_id 一样吗?


相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论