介绍一下啥是模板消息,模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等,模版消息可以不通过用户主动交互向用户推送消息,但是个人建议尽量少推送消息,避免被举报,下方是关于微信模板消息的使用规则
官方文档:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
接口调用请求说明
http请求方式: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
第一步
申请测试公众号,通过测试公众号 ID 和 密钥,获取 access_token 信息
申请一个测试号公众号,详情请看 微信开发:申请测试公众号(一)
获取 access_token 信息,详细请看 微信开发:获取 access_token(二)
第二步
配置模板类,微信模板推送采用的是 JSON 格式,因此我们有两种方式对他进行配置,第一种就是我们下边这个配置模板,然后一步一步中规中矩的来搞,第二种就是我们手动拼 JSON 内容串,然后进行推送,这个地方其实我个人喜欢第二种
分别为 微信消息参数,模版消息内容,模版消息(模版名称规范建议和本博文一样,反正是一个公用的类)
微信消息参数模版 WechatTemplate
package org.ry.utils;
import lombok.Data;
import java.util.Map;
/**
* @ClassName:WechatTemplate
* @Description:TODO 微信消息参数模板
* @Author LinLuoChen
* @Date 2019/11/1/17:32
* @Version V1.0
**/
@Data
public class WechatTemplate {
// 接收人
private String touser;
// 模板消息 ID
private String template_id;
// 跳转路径
private String url;
// 标题颜色
public String topcolor;
// 模板内容信息
private Map<String, TemplateData> data;
}
模版消息内容 TemplateData
package org.ry.utils;
import lombok.Data;
/**
* @ClassName:TemplateData
* @Description:TODO 模板消息的内容,封装模板消息具体内容的类
* @Author LinLuoChen
* @Date 2019/11/1/17:31
* @Version V1.0
**/
@Data
public class TemplateData {
private String value; // 消息内容
private String color; // 消息颜色
}
微信消息模版 MessageTemplate 这个根据 你获取的消息模版的字段来定义
package org.ry.utils;
import lombok.Data;
/**
* @ClassName:wxMessageTemplate
* @Description:TODO 微信消息模板
* @Author LinLuoChen
* @Date 2019/11/4/9:45
* @Version V1.0
**/
@Data
public class MessageTemplate {
// 标题
private String first;
// 内容1
private String keyword1;
// 内容2
private String keyword2;
// 内容3
private String keyword3;
// 内容4
private String keyword4;
// 结束
private String remark;
}
配置这一块就到此结束了
第三步
配置好上边所需要的参数之后们就可以进最后一步,配置推送
package org.ry.demo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.log4j.Logger;
import org.ry.utils.HttpRequestUtil;
import org.ry.utils.MessageTemplate;
import org.ry.utils.TemplateData;
import org.ry.utils.WechatTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName:wx_message
* @Description:TODO 微信消息模版,详细文档说明请查看 instructions/wx_massage_txt 文件
* @Author LinLuoChen
* @Date 2019/11/1/17:01
* @Version V1.0
**/
@Service
public class WxMassage {
// 调用 log 日志
static Logger log = Logger.getLogger(WxMassage.class.getClass());
// 发起救援
public static Integer send_template_messageStart(String openId, MessageTemplate messageTemplate, String access_token) {
// 配置推送连接
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
WechatTemplate wechatTemplate = new WechatTemplate();
//设置模板id
wechatTemplate.setTemplate_id("ouEWjE5zczKwhCcLPtLdZcokWZ0sY1BA3IErXoBneV4"); //需要替换成自己的
wechatTemplate.setTouser(openId);
wechatTemplate.setTopcolor("#000000");
//模板消息点击跳转路径, 如果不配置跳转小程序,可以设置跳转该路径
wechatTemplate.setUrl("http://www.baidu.com");
// 配置模版消息
Map<String, TemplateData> m = new HashMap<String,TemplateData>();
TemplateData first = new TemplateData();
first.setColor("#000000");
first.setValue(messageTemplate.getFirst());
m.put("first", first);
TemplateData keyword1 = new TemplateData();
keyword1.setColor("#000000");
keyword1.setValue(messageTemplate.getKeyword1());
m.put("keyword1", keyword1);
TemplateData keyword2 = new TemplateData();
keyword2.setColor("#000000");
keyword2.setValue(messageTemplate.getKeyword2());
m.put("keyword2", keyword2);
TemplateData keyword3 = new TemplateData();
keyword3.setColor("#000000");
keyword3.setValue(messageTemplate.getKeyword3());
m.put("keyword3", keyword3);
TemplateData keyword4 = new TemplateData();
keyword4.setColor("#000000");
keyword4.setValue("2018-11-10");
m.put("keyword4", keyword4);
TemplateData remark = new TemplateData();
remark.setColor("#000000");
remark.setValue(messageTemplate.getRemark());
m.put("remark", remark);
wechatTemplate.setData(m);
String jsonString = JSON.toJSONString(wechatTemplate).toString();
JSONObject jsonObject = HttpRequestUtil.httpRequest(url, "POST",jsonString);
System.out.println("消息模版:"+jsonObject);
log.info("消息模版:"+jsonObject);
int result = 0;
if (null != jsonObject) {
if (0 != jsonObject.getInteger("errcode")) {
result = jsonObject.getInteger("errcode");
}
}
return result;
}
public static void main(String[] args) {
MessageTemplate messageTemplate = new MessageTemplate();
messageTemplate.setFirst("尊敬的用户");
messageTemplate.setKeyword1("测试");
messageTemplate.setKeyword2("测试的服务");
messageTemplate.setRemark("感谢您的使用");
send_template_messageStart("oLv4UwlggsT1U58k60zetFXi5d3k",messageTemplate,"28_PxuakRwvBI_BTDBleYPQJMUVSsp5fmJTpkeoFr3ZkHtuw3BULX_YGdopWOW4ZF8-Ajnm7ku0HBosGQ3u2oay49XVbFkyKKVPDXvuUxV2XtuA8OGW2s7CwQKQIH_fn42_EKNJJm0XodMxn1E9VFMhADAYIP");
}
}
第二种拼接 JSON 串,以这个为例子
// 最外层
JSONObject data = new JSONObject();
// 存放内容
JSONObject map = new JSONObject();
// 循环遍历内容
for(int i=0;i<strArr.length;i++){
JSONObject o = new JSONObject();
o.put("value",strArrData[i]);
o.put("color","#000000");
map.put(strArr[i],o);
}
// 模板 ID
data.put("template_id","xxxxx");
// 模板颜色
data.put("topcolor","#000000");
// 接收人
data.put("touser","xxxxx");
// 要跳转的路径
data.put("url","www.baidu.com");
// 把内容放进 data 总 json 里边
data.put("data",map);
String jsonString = JSON.toJSONString(data);
// 执行推送
JSONObject jsonObject = HttpRequestUtil.httpRequest(url, "POST",jsonString);