发送微信模板消息,大体分为两步,如下:
1.获取基础支持的access_token;
2.发送模板消息;
代码如下:
/**
* 用户注册成功的模板消息
*/
public void registTemplate(UserExtend user, String openid, String appId, String secret){
// 获取基础支持的access_token
String resultUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId +"&secret="+ secret;
String json = HttpUtil.get(resultUrl);
JSONObject jsonObject = JacksonUtil.toEntity(json, JSONObject.class);
String access_token = jsonObject.get("access_token").toString();
// 发送模板消息
String resultUrl2 = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token;
// 封装基础数据
WechatTemplate wechatTemplate = new WechatTemplate();
wechatTemplate.setTemplate_id("LTXAoB-2oLRPNs26hobQBINwTwy9QXh3G4TtpAruNM4");
wechatTemplate.setTouser(openid);
wechatTemplate.setUrl("http://tw.xxx.com/member/member.html?id="+user.getId());
Map<String,TemplateData> mapdata = new HashMap<>();
// 封装模板数据
TemplateData first = new TemplateData();
first.setValue("您好,您已注册成为XXX平台用户。");
first.setColor("#173177");
mapdata.put("first", first);
TemplateData keyword1 = new TemplateData();
keyword1.setValue(user.getMobile());
first.setColor("#173177");
mapdata.put("keyword1", keyword1);
TemplateData keyword2 = new TemplateData();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String format = formatter.format(DateUtil.date());
keyword2.setValue(format);
first.setColor("#173177");
mapdata.put("keyword2", keyword2);
TemplateData keyword3 = new TemplateData();
keyword3.setValue("欢迎您的加入,请及时购买会员并完善资料>>");
keyword3.setColor("#173177");
mapdata.put("remark", keyword3);
wechatTemplate.setData(mapdata);
String toString = JacksonUtil.toJson(wechatTemplate).toString();
String json2 = HttpUtil.post(resultUrl2,toString);
JSONObject jsonObject2 = JacksonUtil.toEntity(json2, JSONObject.class);
int result = 0;
if (null != jsonObject2) {
if (0 != jsonObject2.getInt("errcode")) {
result = jsonObject2.getInt("errcode");
StaticLog.error("错误 errcode:{} errmsg:{}", jsonObject2.getInt("errcode"), jsonObject2.get("errmsg").toString());
}
}
StaticLog.info("模板消息发送结果:"+result);
}
用到的实体类如下:
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;
}
}
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;
}
}
注意:调用发送模板消息传递参数时需要将实体转为json字符串;其余封装的参数可参照微信模板消息的Api封装即可