嗨:大家好,今天咱们使用微信的时候经常能收到微信的购买消息的通知,这些消息通知很多使用的是模板消息,模板消息比较图文消息来的简单、明了而且内容很清晰,用于简单的消息通知在合适不过了。今天咱们就来看下模板消息。关于模板消息大家要注意几点:
1、微信模板消息模板的申请。这个可以使用固有的模板,就是你选择了你的模板消息所属的一级二级所属行业,就会有一些已经存在的模板,然后咱们是用就可以了。
2、模板有了,咱们呢就可以开发使用这个模板进行模板消息的发送。
3.当然发送给谁这个还是需要关注的用户的信息——openId.
以上就是微信模板消息开发的几个要素。其中第三条就是咱能之前说的微信授权,这里是需要openId的话使用静默授权就可以啦。咱们这里不做赘述,还没有了解的用户可以看看之前的微信授权章节。接下来咱们看一下微信模板消息发送三要素的第一个模板申请:
首先咱们来看一下人家模板库里的消息模板:
编号OPENTM207509450
标题积分变动提醒
行业IT科技 - 互联网|电子商务
使用人数1646
最后修改时间2015-09-01 10:47:55
详细内容
{{first.DATA}}
获得时间:{{keyword1.DATA}}
获得积分:{{keyword2.DATA}}
获得原因:{{keyword3.DATA}}
当前积分:{{keyword4.DATA}}
{{remark.DATA}}
内容示例
亲爱的张三,您的积分账户有新的变动,具体内容如下:
获得时间:2015年10月10日 19:21
获得积分:1000
获得原因:完成交易
当前积分:2000
感谢您的使用
上面的这个就是模板库里的消息模板,咱们要是在模板库里没有找到适合咱们自己开发的模板的话需要申请一个新的模板,模板申请是需要向微信服务器提供咱们的模板模型。具体需要注意的几点就是
1、模板需要符合格式: 具体的申请在:左边栏模板消息 --> 模板库 --> 找不到你想要的模板?帮助我们完善模板库 --> 点击进去之后就会提醒我们填写模板信息
模板
1.1:行业 :这个是咱们业务所属的行业
1.2:标题 :咱们需要发送的模板的标题,有一些规范要求:标题需在4-12字之间,清晰详细的标题有利于通过审核建议模板标题以“通知”或“提醒”作为结尾
1.3:内容 :这个是需要更多的规范要求:
必须以:{{first.DATA}} 以:{{remark.DATA}} 中间的内容是必填的关键字:
填写关键字
:{{keyword1.DATA}}
填写关键字
:{{keyword2.DATA}}
上面的模板库里的消息模板就是严按照这个格式来的,大家自己看一下,但是最好的还是微信开发文档啦:https://mp.weixin.qq.com/advanced/tmplmsg?action=faq&token=1081459479&lang=zh_CN
好了,有了微信消息的模板了,下面咱们这个模板的消息发送看一下:
首先咱们需要获取用户的openId,就是咱们要发送给那些用户,咱们知道这个openId一旦绑定的话一个用户就是一个一直不会变了,这个咱们在授权之后可以存储起来,在各个场合使用。然后就是调用接口啦,微信的接口借调需要凭证的也就是咱们之前一直进行接口调用时候使用的access_token,有了这个access_token之后就可以正式调用微信的发送模板消息接口啦,迫不及待了,咱们来看一下:
/**
* 发送模板消息
* @param token 接口凭证
* @param openId 用户的唯一标识
* @param templateId 模板消息ID
* @param actionUrl 点击模板消息跳转路径
* @param data 模板消息内容 Json 串格式
* @return
*/
private static final String SEND_TEMPLATE_MSG = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";
public TemplateMsgResult sendTemplateMsg(TemplateMsgBean templateMsgBean) {
String url = String.format(SEND_TEMPLATE_MSG, templateMsgBean.getToken());
TemplateMsgResult templetMsgResult = null;
try {
Map<String, String> miniProgram = Maps.newHashMap();
miniProgram.put("appid", "所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系)");
miniProgram.put("pagepath", "所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar)");
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("touser", templateMsgBean.getOpenId());
paramMap.put("template_id", templateMsgBean.getTemplateId());
paramMap.put("topcolor", "#FF0000");
//url有值就跳转,没有Ios空白页,Android不跳转
paramMap.put("url", templateMsgBean.getActionUrl());
//是否跳转小程序,这个参数暂时保留,设置的话就直接跳转小程序了
//paramMap.put("miniprogram", miniProgram);
paramMap.put("data", templateMsgBean.getData());
String param = GsonHolder.getGson().toJson(paramMap);
LOGGER.info("发送模板消息,请求url:{},参数:{}", url, GsonHolder.getGson().toJson(paramMap));
String result = HttpClientUtils.sendHttpsPost(url, param);
LOGGER.info("发送模板消息,返回结果:{}", result);
templetMsgResult = GsonHolder.getGson().fromJson(result, TemplateMsgResult.class);
} catch (Exception ex) {
LOGGER.error("发送微信模板消息异常:", ex);
}
return templetMsgResult;
}
具体的参数使用咱们的注释里已经解释的很清楚了,我在这里就不做说明了。这里还有个注意点就是,微信的模板消息支持小程序的跳转了,很赞吧。其实也就是调用接口啦。大家感兴趣的话可以试试。微信公众号开发后面咱们还在持续中。希望感兴趣的朋友们多多交流。