最近开发微信小程序,需要发送微信消息通知,遇到了不少坑,在此记录
1 一般我们的消息都是一次性订阅。
什么是订阅呢,就是微信要给用户推消息,首先得征得用户同意,即用户订阅微信消息。
那一次性订阅呢,就是每次推送消息前都需要询问用户是否接收该消息。
相对应的呢,就是长期订阅。就像订报纸杂志,你可以订一年的,那么之后一年里每天都会有人往你邮箱里送报纸杂志。
当然微信也支持长期订阅,不过需要一定的资质,或者额外出钱购买模板。
那如果没有资质,也不想支付这部分费用怎么办呢。
目前给出的方式就是把决定权交由用户。
在推送消息前,需要在微信端弹窗 API,当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,就相当于长期订阅了。
2 服务端消息发送
首先需要新建订阅消息模板,可以走接口,也可以在小程序后台
支持页面跳转,但默认会跳到正式版,因此测试环境(体验版),需要做区分
模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
模板内容虽然是 json 结构,但是由于 key 是变化的,也不太适合封装成一个通用的
另外针对不同类别的 key,value 的校验也不一样
参数类别 | 参数说明 | 参数值限制 | 说明 |
---|---|---|---|
thing.DATA | 事物 | 20个以内字符 | 可汉字、数字、字母或符号组合 |
number.DATA | 数字 | 32位以内数字 | 只能数字,可带小数 |
letter.DATA | 字母 | 32位以内字母 | 只能字母 |
symbol.DATA | 符号 | 5位以内符号 | 只能符号 |
character_string.DATA | 字符串 | 32位以内数字、字母或符号 | 可数字、字母或符号组合 |
time.DATA | 时间 | 24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用“~”符号连接 | 例如:15:01,或:2019年10月1日 15:01 |
date.DATA | 日期 | 年月日格式(支持+24小时制时间),支持填时间段,两个时间点之间用“~”符号连接 | 例如:2019年10月1日,或:2019年10月1日 15:01 |
amount.DATA | 金额 | 1个币种符号+10位以内纯数字,可带小数,结尾可带“元” | 可带小数 |
phone_number.DATA | 电话 | 17位以内,数字、符号 | 电话号码,例:+86-0766-66888866 |
car_number.DATA | 车牌 | 8位以内,第一位与最后一位可为汉字,其余为字母或数字 | 车牌号码:粤A8Z888挂 |
name.DATA | 姓名 | 10个以内纯汉字或20个以内纯字母或符号 | 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内 |
phrase.DATA | 汉字 | 5个以内汉字 | 5个以内纯汉字,例如:配送中 |