公众号推送模板消息(JAVA版)
先贴上官方文档
步骤不多:组装请求体,调用接口
接口:(POST)https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
POST数据示例:
touser:指定推送用户的openId;
template_id:模板消息Id,去公众号里面去找,要注意公众号的行业和模板的行业要一致;
url和miniprogram:用来指定模板的跳转(可以省略);
data:消息体,示例里面的key值和你模板里面的key值要对应起来
代码实现
1、先准备模板消息的实体类(这里用了lombok):
@Data
public class WxTemplate {
private String template_id;
private String touser;
private Map<String,TemplateData> data;
}
@Data
public class TemplateData{
private String value;
private String color;
}
2、业务层:
@Component
public class SendMessageServer {
@Autowired
RestTemplate restTemplate;
public void sendMessage(){
//获取当前司机的openId
String openId="对应的用户的openId";
//模板ID
String templateId="你的模板ID";
//拼接url
String url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+"你的accesstoken";
//封装post的请求体
WxTemplate temp = new WxTemplate();
temp.setTouser(openId);
temp.setTemplate_id(templateId);
Map<String,TemplateData> m = new HashMap<>();
TemplateData first = new TemplateData();
first.setColor("#000000");
first.setValue(messageHead);
m.put("first", first);
TemplateData keyword1 = new TemplateData();
keyword1.setColor("#000000");
keyword1.setValue("***太仓分公司");
m.put("keyword1", keyword1);
TemplateData keyword2 = new TemplateData();
keyword2.setColor("#000000");
keyword2.setValue("原料卸货");
m.put("keyword2", keyword2);
TemplateData keyword3 = new TemplateData();
keyword3.setColor("#000000");
keyword3.setValue("见送货单");
m.put("keyword3", keyword3);
TemplateData keyword4 = new TemplateData();
keyword4.setColor("#000000");
keyword4.setValue(deliveryCode);
m.put("keyword4", keyword4);
TemplateData remark = new TemplateData();
remark.setColor("#000000");
remark.setValue(messageBody);
m.put("remark", remark);
temp.setData(m);
String data= JSONArray.toJSONString(temp);
//请求
String result = restTemplate.patchForObject(url,data ,String.class);
}
}
}