- 使用场景1:在微信小程序中进行了某种操作后,推送消息告知用户的操作结果
- 使用场景2:微信端办公流程提交给下一个人审批后,得到审批通过或是驳回修改的命令
- 使用场景具体如下图,可用在签到、提醒、通知、警告、催办等方面:
上面的实例图片就是通过后台 给微信推送的订阅消息。那具体的应该怎么实现呢,且看下文分解。
实现步骤
1 微信公众平台的配置
1.1 选用公共模板库中的模板
- 登录微信公众平台后台,点击功能》订阅消息(若之前没有使用过,则点击开通)
- 点击公共模板库 的title,可以看到 有很多模板,可以点击搜索选取适合自己的模板
- 选到心仪的模板后,点击选用
- 选用之后,可以看到模板有很多关键词,这些关键词可以选择性取用,比如上图我只选择了4个关键词,关键词不够可以申请
- 关键词选用完毕之后,填写场景说明,点击提交,就可以了看到这个模板已经出现在了我的模板库中
1.2 自定义模板
很多时候,公共模板库中的模板还是不能够满足我们的需求,那这个时候我们可以自定义模板,如下
- 在公共模板库中找不心仪的模板后,我们把页面点击跳转到最后一页
- 点击:“帮忙我们完善模板库”,就可以了看到创建模板的页面
- 根据实际需求填写关键词和参数类型。
- 填写完成之后点击提交,一般会审核3-5天,审核完成后就可以
- 这里有一点小小的要注意的,如上图所示,姓名和名称之类关键词的参数类型我们一般选择 “事务”,而不是字符串,具体参数规则如下所示
1.3 我的模板
无论时选用公共模板库中的模板,还是申请自定义模板,模板都会出现在 “我的模板”这个title下,如下图
- 我们点击详情,就可以看到模板具体的信息,其中发送消息最重要的参数我们在这个页面可以看到
- 一个是:模板ID。模板id决定了发送消息时选用哪个模板
- 一个是:详细内容。详细内容就是要往模板中要塞哪些参数,比如上面这个模板的参数就有4个,name1、date2、thing4、thing5。这4个参数就相当于实体的属性一样,在下面的文章中我还会介绍到,暂且不表。
到这里为止微信公众平台的配置基本已经完成,下面我们开始Java端的配置。
2 Java端的配置
在这里首先梳理一下Java端要做哪些事及其步骤;
- 定义一个消息模板的参数实体。并往里面塞值
- 定义一个消息配置实体。这个实体包含了一些重要的属性,主要如下
2.1:touser:接收者(用户)的 openid
2.2:template_id:所需下发的消息模板id
2.3:page:用户点击消息后跳转到小程序指定的页面路径
2.4:data:消息模板的实体 - 获取openid。由第2步可以知道,我们已经可以得到在微信公众平台配置的模板id、自定义的跳转路径、和第1步设置的消息模板的实体。那我们还需要设置touser(即获取到用户的openid),openid决定了我们要把消息推送给哪个用户
- 获取access_token。作为参数拼接出微信小程序推送消息的url接口。
- 推送消息
详情如下:
2.1 定义消息模板的参数实体
-
在微信公众平台的消息订阅中找到消息模板,找到具体有哪些参数。如下图所示,我们可以看到该模板有name1、date2、thing4、thing5四个参数(后面的DATA不用管)
-
定义消息模板参数实体,官方定义的消息模板demo的参数的json格式是这个样的
{
"number01": {
"value": "339208499"
},
"date01": {
"value": "2015年01月05日"
},
"site01": {
"value": "TIT创意园"
} ,
"site02": {
"value": "广州市新港中路397号"
}
}
所以我们定义实体参数的时候,要相应的改成以下格式的
import java.util.HashMap;
import java.util.Map;
/*消息模板-扫码*/
public class WxMsgTemplateQRCode {
/*扫码用户*/
private Map<String, String> name1;
/*扫码时间*/
private Map<String, String> date2;
/*扫描位置*/
private Map<String, String> thing4;
/*扫码内容*/
private Map<String, String> thing5;
public Map<String, String> getName1() {
return name1;
}
public void setName1(String name1) {
this.name1 = getFormat(name1);
}
public Map<String, String> getDate2() {
return date2;
}
public void setDate2(String date2) {
this.date2 = getFormat(date2);
}
public Map<String, String> getThing4() {
return thing4;
}
public void setThing4(String thing4) {
this.thing4 = getFormat(thing4);
}
public Map<String, String> getThing5() {
return thing5;
}
public void setThing5(String thing5) {
this.thing5 = getFormat(thing5);
}
public HashMap<String, String> getFormat(String str) {
return new HashMap<String, String>() {
{
put("value", str);
}};
}
}
2.2 定义消息配置实体
public class WxMsgConfig {
/*接收者(用户)的 openid*/
private String touser;
/*所需下发的订阅模板id*/
private String template_id;
/*点击消息后跳转的页面*/
private String page;
/*跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版*/
private String miniprogram_state="developer";
/*进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、