前言
微信PC后台群发送服务号的通知消息会消耗发送次数,每月4次;这里想通过微信API发送。
注:本文只需要使用CURL工具即可全部完成
比较 | 微信后台 | 微信API |
---|---|---|
富文本 | 美观,不限字数,排版整齐 | 使用图片替代大文本,可以写少量文字,需要HTML格式,且不能大于2W字符 |
发送次数 | 无论怎么群发,只有4次 | 每个openid四次 |
操作 | 简单,方便 | 熟练后也可达到操作方便 |
准备
登录微信测试
打开这三个链接
微信公众平台接口测试帐号申请
微信官方开发文档
微信开发-错误码大全
1、获取access_token
测试账号里边都有参数,获取后时效2H
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
2、上传封面
这里看你发图文消息需要新增永久素材,首先上传封面主图,然后上传你点击图文通知后的页面中所需要的图片(也就是你点击封面跳转的主页,用图片可以解决内容限制问题)
https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE
http请求方式: POST,需使用https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE
调用示例(使用curl命令,用FORM表单方式新增一个其他类型的永久素材,curl命令的使用请自行查阅资料)
2.1 返回值
{"media_id":"JhEacS4lHSZQWtj5CO01-g-SPRIwcR9O0MbUl_yC6mQ",
"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_png\/xGfbYHhGLIaeUpoYUJ1PEoJ4LeUtxkias9lK331qhl6J8zbycVVbQyx4DCODLbAibTafXkBSlga8hPBVHwnkKMVw\/0?wx_fmt=png",
"item":[]}
我们需要的封面图片的永久素材链接就拿到了,第一张图片做封面,其他图片作为图文内容
3、上传图文消息素材【订阅号与服务号认证后均可用】
3.1 上传素材模板
https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
http请求方式: POST,https协议 https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
{
"articles": [
{
"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
"author":"xxx",
"title":"Happy Day",
"content_source_url":"www.qq.com",
"content":"content",
"digest":"digest",
"show_cover_pic":1,
"need_open_comment":1,
"only_fans_can_comment":1
},
{
"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
"author":"xxx",
"title":"Happy Day",
"content_source_url":"www.qq.com",
"content":"content",
"digest":"digest",
"show_cover_pic":0,
"need_open_comment":1,
"only_fans_can_comment":1
}
]
}
3.2 举例
多图文就上传多个,我做的单图文,就上传了一个,内容写其他图片的链接,写HTML,注意不要引入外部链接,需要的是微信自己的永久链接,包括content内引入
{
"articles": [
{
"title": "倒计时4天!这项福利马上截止!",
"thumb_media_id": "JhEacS4lHSZQWtj5CO01-pmMTWyiwf9dmaLNNYz7-bc",
"author": "广东人保财险",
"digest": "潮州市民专属",
"show_cover_pic":0,
"content": " <img src='http://mmbiz.qpic.cn/mmbiz_png/xGfbYHhGLIaeUpoYUJ1PEoJ4LeUtxkias9lK331qhl6J8zbycVVbQyx4DCODLbAibTafXkBSlga8hPBVHwnkKMVw/0?wx_fmt=png' /><br/><img src='http://mmbiz.qpic.cn/mmbiz_jpg/ARnXGRTURlbiaibLeLOIR7GA3LzI833qFIMXKl2SMiba3EBIyldzfoic8DtFLn1gBEDubLEibJQwlWLlPmyA5db1FYg/0?wx_fmt=jpeg' /><br/>点击阅读原文",
"content_source_url": "https://mp.weixin.qq.com/s/PwX_aYbDWQjGSr8sHH2eZQ",
"need_open_comment":1,
"only_fans_can_comment":1
}
]
}
3.3 返回值
需要这个media_id
{"media_id":"JhEacS4lHSZQWtj5CO01-lUmY_KyWn4ZA-jtCE-hBJA","item":[]}
4、预览接口【订阅号与服务号认证后均可用】
https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN
图文消息(其中media_id与根据分组群发中的media_id相同):
其他消息类型
{
"touser":"OPENID",
"mpnews":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"mpnews"
}
5、接收预览
进行完第4步你就可以获取到微信通知,在你的订阅号打开就可以看了,至此实现了开篇动图效果。预览完毕调用发送接口即可群发给指定用户,标签,所有群体
6、群发
在预览界面查看点击确认无问题后,执行群发。
URL
https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
群发可以选择按照用户群发或者按照标签群发,这里推荐按照标签群发,只用调一遍接口
{
"filter":{
"is_to_all":false,
"tag_id":137
},
"mpnews":{
"media_id":"XCRd2iesS4v24lqvDXkusDl268USWhP4qc3pjqPNPY4"
},
"msgtype":"mpnews",
"send_ignore_reprint":0
}
参数
返回值
这个msg_id需要用
{
"errcode": 0,
"errmsg": "send job submission success",
"msg_id": 3147494172,
"msg_data_id": 2652648566
}
7、校验群发结果
URL
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=ACCESS_TOKEN
参数
{
"msg_id": "201053012"
}
返回值
成功发送
{
"msg_id": 3147494172,
"msg_status": "SEND_SUCCESS"
}
8、删除群发
当你觉得群发出现错误时,可以选择删除群发,相当于撤回,这里笔者没有尝试,任务发送复查没问题后结束任务
删除群发【订阅号与服务号认证后均可用】
URL
https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=ACCESS_TOKEN
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=ACCESS_TOKEN
参数
{
"msg_id":30124,
"article_idx":2
}
返回值
{
"errcode":0,
"errmsg":"ok"
}
9、查看图文media_id
有时候通过微信后台编辑好了模板media_id,但是我们自己CURL并不知道,所以就需要API获取
获取永久素材的列表
URL
http请求方式: POST https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
参数
{
"type":TYPE,
"offset":OFFSET,
"count":COUNT
}
参考我的,offset是1就是第几条开始,类似于分页,查两条就找到最新的了,按照type来查询
{
"type":"news",
"offset":1,
"count":2
}
返回
{
"total_count": TOTAL_COUNT,
"item_count": ITEM_COUNT,
"item": [{
"media_id": MEDIA_ID,
"content": {
"news_item": [{
"title": TITLE,
"thumb_media_id": THUMB_MEDIA_ID,
"show_cover_pic": SHOW_COVER_PIC(0 / 1),
"author": AUTHOR,
"digest": DIGEST,
"content": CONTENT,
"url": URL,
"content_source_url": CONTETN_SOURCE_URL
},
//多图文消息会在此处有多篇文章
]
},
"update_time": UPDATE_TIME
},
//可能有多个图文消息item结构
]
}
其他类型(图片、语音、视频)的返回如下:
{
"total_count": TOTAL_COUNT,
"item_count": ITEM_COUNT,
"item": [{
"media_id": MEDIA_ID,
"name": NAME,
"update_time": UPDATE_TIME,
"url":URL
},
//可能会有多个素材
]
}
错误情况下的返回JSON数据包示例如下(示例为无效媒体类型错误):
{"errcode":40007,"errmsg":"invalid media_id"}