微信推送

公众号推送

简介

微信公众号提供了接口方便进行消息推送。只要用户关注了对应的服务号, 就可以对其进行消息推送。推送的消息,支持打开网页或者打开小程序

限制: 公众号推送只针对服务号,普通个人公众号是不支持推送的。必须通过认证(花钱了)才可以调用推送接口

生成密钥

为了方便调用推送接口,需要先生成密钥,也就是AppIDAppSecret,前往“开发 -> 基本配置” 中生成 AppSecret。主要 AppSecret 生成后需要保存起来,后续是没法在微信后台进行查看的。

生成密钥

生成 ACCESS_TOKEN

在调用推送接口之前,需要先生成一个ACCESS_TOKEN。可以将其理解为用户登入。通过之前的AppIDAppSecret可以换取ACCESS_TOKEN

只需要往 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=AppID&secret=AppSecret发送一个GET请求,就可以获取ACCESS_TOKEN。相应如下:

1
2
3
4
{
"access_token": "23_ut_jOdU43FNnaEtNm_9SJx...",
"expires_in": 7200
}

生成模板

微信推模板送都由一定的格式,这个格式叫做模板。可以访问微信后台的“功能 -> 模板消息”来创建模板,模板创建后,会生成一个模板 ID,这个模板 ID 会在推送接口里面用到。

生成推送模板

模板效果

消息推送

推送接口可以参考微信官方文档

简单来说,就是往https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN发送 POST 请求,请求参数如下所示:

参数 是否必填 说明
touser 接收者 openid
template_id 模板 ID
url 模板跳转链接(海外帐号没有跳转能力)
miniprogram 跳小程序所需数据,不需跳小程序可不用传该数据
appid 所需跳转到的小程序 appid(该小程序 appid 必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏)
pagepath 所需跳转到小程序的具体页面路径,支持带参数,(示例 index?foo=bar),要求该小程序已发布,暂不支持小游戏
data 模板数据
color 模板内容字体颜色,不填默认为黑色

推送 URL 传递 json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"touser": "o_rbq1TOgERuflYd7PsiE9H565Oo",
"template_id": "n44_YbDNEqrrSEEvd8The8HpWYo1gWOVAXj7zIz4vHA",
"url": "http://www.baidu.com",
"data": {
"remark": {
"value": "不积跬步无以至千里,加油!"
},
"keyword3": {
"value": "2019-06-09"
},
"first": {
"value": "石头同学,提醒您背单词啦"
},
"keyword1": {
"value": "巅峰单词800个背诵"
},
"keyword2": {
"value": "今日背诵单词任务未完成"
}
}
}

推送小程序传递 json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"touser": "o_rbq1TOgERuflYd7PsiE9H565Oo",
"template_id": "n44_YbDNEqrrSEEvd8The8HpWYo1gWOVAXj7zIz4vHA",
"miniprogram": {
"appid": "wx2210554e092c3f99",
"pagepath": "pages/index/index"
},
"data": {
"remark": {
"value": "不积跬步无以至千里,加油!"
},
"keyword3": {
"value": "2019-06-09"
},
"first": {
"value": "石头同学,提醒您背单词啦"
},
"keyword1": {
"value": "巅峰单词800个背诵"
},
"keyword2": {
"value": "今日背诵单词任务未完成"
}
}
}

小程序推送

简介

和公众号类似, 小程序支持给用户下发服务通知。

限制: 必须通过认证(花钱了)才可以调用推送接口

生成密钥

和微信公众号类似,需要先生成密钥,也就是AppIDAppSecret,前往“开发 -> 开发设置” 中生成 AppSecret。主要 AppSecret 生成后需要保存起来,后续是没法在微信后台进行查看的。

生成 ACCESS_TOKEN

和公众号一样,也是往https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=AppID&secret=AppSecret发送一个GET请求,就可以获取ACCESS_TOKEN

生成模板

和公众号类似, 小程序推送也需要模板。需要前往“功能 -> 模板消息”中生成模板

消息推送

推送接口可以参考微信官方文档

简单来说,就是往https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN发送 POST 请求,请求参数如下所示:

参数 类型 是否必填 说明
access_token string 接口调用凭证
touser string 接收者(用户)的 openid
template_id string 所需下发的模板消息的 id
page string 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例 index?foo=bar)。该字段不填则模板无跳转。
form_id string 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
data Object 模板内容,不填则下发空模板。具体格式请参考示例。
emphasis_keyword string 模板需要放大的关键词,不填则默认无放大

注意参数中的form_id, 它只有在用户发生支付行为 或者用户主动提交了表单后,才会生成。如果想多次进行消息推送,需要搜集用户的form_id信息

一个典型的获取form_id的代码如下:

1
2
3
<form bindsubmit="formSubmit" bindreset="formReset" report-submit="true">
<button form-type="submit">Submit</button>
</form>
1
2
3
4
5
Page({
formSubmit: function(e) {
console.log('form发生了submit事件,formId为:', e.detail.formId)
}
})

推送小程序传递 json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"access_token": "21_2HPTNjvIKFLhVTSI5t9eF...", // 访问 access_token
"touser": "ogYQ75G33BMpuKOjKjIIOiFP7cF4", // 小程序用户的 openId
"template_id": "-SvDCjf6VG7lGAITKmdhHp6ZBQx1huJdBMO9hFAgI0w",
"page": "pages/index/index",
"form_id": "b7ed924575c449a080bb140e90a6f326", // form_id
"data": {
"keyword1": {
"value": "石头"
},
"keyword2": {
"value": "2019年5月18日 13:00 - 15:00"
},
"keyword3": {
"value": "雅思学习(第二课时)"
},
"keyword4": {
"value": "学习成就未来,每一步都是成长"
}
}
}