前提:
1):第一个前提是你已经拿到了 appid和appsceart
2) :第二个前提是去微信公众平台申请一个消息模板
内容:
1):首先获得AcesssToken 这里采用rest请求
public static String getAccessToken() {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> params = new HashMap<>();
params.put("APPID", "你的appid"); //
params.put("APPSECRET", "你的APPSECRET"); //
ResponseEntity<String> responseEntity = restTemplate.getForEntity(
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params);
String body = responseEntity.getBody();
JSONObject object = JSON.parseObject(body);
String Access_Token = object.getString("access_token");
// String expires_in = object.getString("expires_in"); //token保留时间为2个小时 需要定时去刷新
// System.out.println("有效时长expires_in:" + expires_in);
return Access_Token;
}
2):推送模板
public static void push(SendWxMessageDTO sendWxMessageDTO) {
RestTemplate restTemplate = new RestTemplate();
//这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取)
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken();
//拼接推送的模版
WxMssVo wxMssVo = new WxMssVo();
wxMssVo.setTouser(sendWxMessageDTO.getOpenid());//用户的openid(要发送给那个用户,通常这里应该动态传进来的)
//这里的openid是在用户登录成功后,我直接存储到数据库的,所以这里直接从数据库拿取。你要发给谁就使用谁的openid
wxMssVo.setTemplate_id("这里填写你的模板ID");//(你申请成功后的模板ID)
wxMssVo.setPage("pages/index/index");//点击提醒 跳转的页面
wxMssVo.setData(sendWxMessageDTO.getM());
ResponseEntity<String> responseEntity =
restTemplate.postForEntity(url, wxMssVo, String.class);
System.out.println(responseEntity.getBody());
}
3) :WxMssVo实体类(用于请求参数的封装)
@Data
public class WxMssVo {
private String touser;//用户openid
private String template_id;//订阅消息模版id
private String page = "pages/index/index";//默认跳到小程序首页
private Map<String, TemplateData> data;//推送文字
}
4) :SendWxMessageDTO (用于返回参数的封装)
@Data
public class SendWxMessageDTO {
private String openid;
private Map<String, TemplateData> m;
}
5)TemplateData (用户封装基本数据)
@Data
public class TemplateData {
private String value;
public TemplateData(String value) {
this.value = value;
}
}
SendWxMessageDTO 数据案例:
SendWxMessageDTO sendWxMessageDTO = new SendWxMessageDTO();
sendWxMessageDTO.setOpenid(umsAdmin.getOpenid()); //从数据库中读取用户的openid
Map<String, TemplateData> m =new HashMap<>();
m.put("thing1",new TemplateData("疫苗提醒"));
m.put("time4",new TemplateData(localTime1));
m.put("thing2",new TemplateData("今天是打疫苗的时间哦"));
sendWxMessageDTO.setM(m);
SendWxMessage.push(sendWxMessageDTO); //执行发送订阅方法
上面Map中添加的thing1 time4这些 是你在申请模板时的数据 要保持一致