微信订阅消息推送
所需代码:
- 工具类
package com.zmkj.springcloud.pass.common.entity.wx.mesPushData;
public class TemplateData {
private String value;//
public TemplateData(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.zmkj.springcloud.pass.common.entity.wx.mesPushData;
import java.util.Map;
/*
* 小程序推送所需数据
* */
public class WxMssVo {
private String touser;//用户openid
private String template_id;//订阅消息模版id
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 Map<String, TemplateData> getData() {
return data;
}
public void setData(Map<String, TemplateData> data) {
this.data = data;
}
}
package com.zmkj.springcloud.pass.common.util;
import com.alibaba.fastjson.JSON;
import com.zmkj.springcloud.pass.common.entity.wx.mesPushData.TemplateData;
import com.zmkj.springcloud.pass.common.entity.wx.mesPushData.WxMssVo;
import com.zmkj.springcloud.pass.common.vo.Result;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
/*
* 微信消息推送
* */
public class WxMesgPushUtil {
private static RestTemplate restTemplate;
static {
// 构建请求对象
restTemplate = new RestTemplate();
}
// 推送
public static Result<Object> wxPush(String appId, String secret, String oppenId, String TemplateId, Map<String, TemplateData> hashMap) {
String accessToken = "";
// 微信 获取 token
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={1}&secret={2}";
ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class, appId, secret);
String code = forEntity.getStatusCode().toString();
if ("200".equals(code)) {
String body = forEntity.getBody();
Map map = JSON.parseObject(body, Map.class);
accessToken = map.get("access_token").toString();
}
// 定义消息推送请求
String postUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
// 创建消息推送对象
WxMssVo wxMssVo = new WxMssVo();
wxMssVo.setTouser(oppenId);
wxMssVo.setTemplate_id(TemplateId);
wxMssVo.setData(hashMap);
// 发送请求
ResponseEntity<String> responseEntity = restTemplate.postForEntity(postUrl, wxMssVo, String.class);
// 推送成功格式: {"errcode":0,"errmsg":"ok"}
String wxCode = responseEntity.getStatusCode().toString();
if ("200".equals(wxCode)) {
// 判断是否报错
String body = responseEntity.getBody();
Map<String, String> map = JSON.parseObject(body, Map.class);
String errmsg = map.get("errmsg");
if ("ok".equals(errmsg)) {
// 返回成功
Result<Object> result = new Result<>(StatusMagic.SUCCESS);
return result;
} else {
// 返回失败
Result<Object> result = new Result<>(StatusMagic.ERROR);
result.setMsg(errmsg);
return result;
}
} else {
Result<Object> result = new Result<>(StatusMagic.ERROR);
result.setMsg(wxCode);
return result;
}
}
}
package com.zmkj.springcloud.pass.common.vo;
import com.alibaba.fastjson.JSONObject;
import com.zmkj.springcloud.pass.common.util.StatusMagic;
public class Result<T> {
public Integer code;
public String msg;
public T data;
public Result() {
}
public Result(int code, String msg) {
this.code = code;
this.msg = msg;
}
public Result(StatusMagic sm) {
// this.data = new JSONObject();
this.code = sm.getCode();
this.msg = sm.getMessage();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}