在使用客服发送消息的时候,发现会报45015错误
{"errcode":45015,"errmsg":"response out of time limit or subscription is canceled hint: [8dH7Wa04478630]"}
问题原因:由于长时间用户OpenId未和微信公众号做互动消息,微信公众号会停止对用户进行消息推送。
解决办法:1、是我们主动的发送消息,来保证会话。
2、是通过模板消息(这样要改代码)
2种情况是实际情况而定
如何开发模板消息
1、配置模板(测试号) 正式需要申请在配置
2、配置好后,写java代码
我们可以看看发送格式
如图的json格式,而我的模板中不是这么定义的
我定义的是account_name,err_info,time字段,
封装bean
最外层bean
public class TemplateSend {
private String touser;
private String template_id;
private String url;
private DataObject 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 DataObject getData() {
return data;
}
public void setData(DataObject data) {
this.data = data;
}
}
DataObject
public class DataObject {
private Map<String,Object> account_name;
private Map<String,Object> err_info;
private Map<String,Object> time;
private Map<String,Object> first;
private Map<String,Object> keyword1;
private Map<String,Object> keyword2;
private Map<String,Object> keyword3;
private Map<String,Object> keyword4;
private Map<String,Object> remark;
public Map<String, Object> getAccount_name() {
return account_name;
}
public void setAccount_name(Map<String, Object> account_name) {
this.account_name = account_name;
}
public Map<String, Object> getErr_info() {
return err_info;
}
public void setErr_info(Map<String, Object> err_info) {
this.err_info = err_info;
}
public Map<String, Object> getTime() {
return time;
}
public void setTime(Map<String, Object> time) {
this.time = time;
}
public Map<String, Object> getFirst() {
return first;
}
public void setFirst(Map<String, Object> first) {
this.first = first;
}
public Map<String, Object> getKeyword1() {
return keyword1;
}
public void setKeyword1(Map<String, Object> keyword1) {
this.keyword1 = keyword1;
}
public Map<String, Object> getKeyword2() {
return keyword2;
}
public void setKeyword2(Map<String, Object> keyword2) {
this.keyword2 = keyword2;
}
public Map<String, Object> getKeyword3() {
return keyword3;
}
public void setKeyword3(Map<String, Object> keyword3) {
this.keyword3 = keyword3;
}
public Map<String, Object> getKeyword4() {
return keyword4;
}
public void setKeyword4(Map<String, Object> keyword4) {
this.keyword4 = keyword4;
}
public Map<String, Object> getRemark() {
return remark;
}
public void setRemark(Map<String, Object> remark) {
this.remark = remark;
}
}
bean封装好,我们就是写测试数据了
模板消息发送链接:
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
@Test
public void sendTemplateText(){
// 模板消息
String url = SystemConstant.TEMPLATESEND+token;
TemplateSend templateSend = new TemplateSend();
templateSend.setTouser("oV60x1QqydV9g2aYhyJTn6vBNscc");
templateSend.setTemplate_id("R3jVHnKRXBxtX7ATqIAnV40ZOP35F3aTcjCJqvf_J-Q");
DataObject data = new DataObject();
Map<String,Object> account_name = new HashMap<>();
account_name.put("value", "中华万年历");
account_name.put("color", "#173177");
data.setAccount_name(account_name);
Map<String,Object> err_info = new HashMap<>();
err_info.put("value", "xxxx账户登录失败");
err_info.put("color", "#173177");
data.setErr_info(err_info);
Map<String,Object> time = new HashMap<>();
time.put("value", DateUtils.timeStamp2DateYmdhms(new Date()));
time.put("color", "#173177");
data.setTime(time);
templateSend.setData(data);
String spmMessage = gson.toJson(templateSend);
System.out.println(spmMessage);
try {
String result = HttpClientUtils.sendPost(url,spmMessage);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}