注:url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
4 java接口开发
(1)封装请求参数Demo
public class TemplateData { private String value; private String color; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
public class WechatTemplate { private String touser; private String template_id; private String url; private Map<String, TemplateData> data; public String getTouser() { return touser; } public void setTouser(String touser) { this.touser = touser; } public String getTemplate_id() { return template_id; } public void setTemplate_id(String template_id) { this.template_id = template_id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Map<String, TemplateData> getData() { return data; } public void setData(Map<String, TemplateData> data) { this.data = data; } }
(2)发送模板消息方法
public class TemplateMessageServiceImpl implements TemplateMessageService{ private RestTemplate restTemplate ; private String serviceHost = "https://api.weixin.qq.com"; public TemplateMessageServiceImpl() { restTemplate = RestTemplateFactory.makeRestTemplate(); } @Override public WeixinResponse sendTemplateMessage(String accessToken, WeixinTemplate weixinTemplate) { WeixinResponse weixinResponse = null; String url = new StringBuffer(serviceHost).append("/cgi-bin/message/template/send?access_token=") .append(accessToken).toString(); weixinResponse = restTemplate.postForObject(url, weixinTemplate, WeixinResponse.class,new HashMap<String,String>()); return weixinResponse; } }
说明:简单理解模板消息发送,首先是获取accessToken,(如何获取请参考:微信公众平台 获取access_token)。其次是模板消息的参数封装,最后就是http的post请求。我的http请求是使用Spring的restTemplate进行请求,就不用我单独写一个http请求方法,如果没有使用可以写一个http请求的工具类。
(3)封装响应参数Demo
package com.plateno.weixin.message.model; public class WeixinResponse { private String msgid; private int errcode; private String errmsg; public String getMsgid() { return msgid; } public void setMsgid(String msgid) { this.msgid = msgid; } public int getErrcode() { return errcode; } public void setErrcode(int errcode) { this.errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } @Override public String toString() { StringBuffer buf = new StringBuffer("WeixinResponse[msgid="); buf.append(msgid) .append(",errcode=").append(errcode) .append(",errmsg=").append(errmsg) .append("]"); return buf.toString(); } }
模板消息发送效果:
四、事件推送
在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。
1 送达成功时
(1)推送的XML如下
<xml> <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName> <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName> <CreateTime>1395658920</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event> <MsgID>200163836</MsgID> <Status><![CDATA[success]]></Status> </xml>
(2)参数说明
参数
说明
ToUserName
公众号微信号
FromUserName
接收模板消息的用户的openid
CreateTime
创建时间
MsgType
消息类型是事件
Event
事件为模板消息发送结束
MsgID
消息id
Status
发送状态为成功
2 送达由于用户拒收(用户设置拒绝接收公众号消息)而失败时
(1)推送的XML如下