很多时候开发服务器都是被动回复用户消息的,像关键词回复,模板消息这些,那我们如何实现像成绩推送,课程推送这样的需求呢。这就需要我们主动发送消息给用户。因为我实现过成绩推送需求。所以下面我以成绩推送说明。
什么是模板消息:模板消息仅用于公众号向用户发送重要的服务通知.在测试号中我们可以自定义模板消息,但是在公众号平台中,我们只能从模板库中查找我们所需要的的模板,可以自己自定义模板,但是需要微信审核。
公众号模板消息样式:
模板消息格式:
参数 | 是否必填 | 说明 |
---|---|---|
touser | 是 | 接收者openid |
template_id | 是 | 模板ID |
url | 否 | 模板跳转链接(海外帐号没有跳转能力) |
miniprogram | 否 | 跳小程序所需数据,不需跳小程序可不用传该数据 |
appid | 是 | 所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏) |
pagepath | 否 | 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏 |
data | 是 | 模板数据 |
color | 否 | 模板内容字体颜色,不填默认为黑色 |
直接上代码
微信公众号开发工具包依赖
<!-- 微信开发工具包 -->
<dependency>
<groupId>me.chanjar</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>me.chanjar</groupId>
<artifactId>weixin-java-common</artifactId>
<version>1.3.3</version>
</dependency>
开发代码
public class WXTest {
@Test
public void courseTemplateTest(){
//创建配置对象
WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage=new WxMpInMemoryConfigStorage();
//微信公众号的appid
wxMpInMemoryConfigStorage.setAppId("");
//微信公众号的密钥
wxMpInMemoryConfigStorage.setSecret("");
//创建服务对象
WxMpService service=new WxMpServiceImpl();
//将配置对象注入服务对象中
service.setWxMpConfigStorage(wxMpInMemoryConfigStorage);
//创建模板消息对象
WxMpTemplateMessage templateMessage=new WxMpTemplateMessage();
//微信公众平台中我的模板库中的 模板id
templateMessage.setTemplateId("");
//用户接收到的模板消息 点击跳转的页面
templateMessage.setUrl("http://www.baidu.com");
/**
* 需要发送到某一个用户 opneid是微信公众号用户的唯一标识 我做的是成绩推送
* 所以在之前 用户绑定的时候在数据库中存储用户的openid
*/
templateMessage.setToUser("");
//设置需要发送的消息
List<WxMpTemplateData> datas = templateMessage.getDatas();
// 参数1 name必须和模板消息中的key值相对应
// 参数2 value是需要显示的值
// 参数3 color代表字体的颜色
WxMpTemplateData dataName=new WxMpTemplateData("first","哈喽,\n又公布了一门成绩,快来看看吧!\n","#173177");
WxMpTemplateData dataCourse=new WxMpTemplateData("keyword1","高等数学","#173177");
WxMpTemplateData dataScore=new WxMpTemplateData("keyword2","99","#173177");
WxMpTemplateData dataEnd=new WxMpTemplateData("remark","点击查看全部成绩","#173177");
datas.add(dataCourse);
datas.add(dataName);
datas.add(dataScore);
datas.add(dataEnd);
try {
//发送模板消息
service.templateSend(templateMessage);
} catch (WxErrorException e) {
e.printStackTrace();
}
}
}
微信公众号的appid和密钥的获取
微信公众平台->开发->基本配置。
注意:正式环境中,需要在ip白名单里配置服务器的ip地址,不然消息会被拦截,这也是为了安全考虑
开发的代码很简单,重要的是理解过程,可能我写的不够详细,等我以后再详细补充。