今天分享一下公众号推送模板消息的开发案例。应用场景:用户在公众号上进行了一些操作后,公众号自动向用户推送相关的模板消息,常见的比如用户在公众号付款后会收到商家的付款消息提醒。接下来通过笔者在测试账户上的开发案例,效果如下:
开发步骤:
1、在微信公众测试账户上添加测试模板,添加模板后会得到模板ID,模板内容如下:
2、学习微信文档,查看模板消息接口
接口:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
请求方式:POST请求
必须参数格式:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"data":[{ }]
}
3、后台代码实现
//用户缴费成功后推送模板消息(提醒用户该车牌已缴费)
public TemplateMsgResponse pushHasPayMsg(String carNumber,RechargeRecord record, String openid) throws IOException {
String accessToken = getToken();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String startTime = sdf.format(record.getPayTime());//支付时间即就是有效期开始时间
String date = startTime.substring(0,4);
String endTime = date + "-12-31 23:59"; //有效期截止时间
JSONObject first=new JSONObject();//消息的首行,标题
first.put("value","恭喜您已缴费成功");
first.put("color","#007f80");
JSONObject keyword1=new JSONObject();
JSONObject keyword2=new JSONObject();
JSONObject keyword3=new JSONObject();
JSONObject keyword4=new JSONObject();
keyword1.put("value",carNumber);
keyword2.put("value","园区内专用停车位");
keyword3.put("value","0.01元");
keyword4.put("value",startTime);
JSONObject remark=new JSONObject();
remark.put("value", "温馨提醒:您已成功支付车辆"+carNumber+"在本年度的通行费用,您将在本园区可以畅通无阻");
remark.put("color", "#007f80");
JSONObject text=new JSONObject();
text.put("keyword1", keyword1);
text.put("keyword2", keyword2);
text.put("keyword3", keyword3);
text.put("keyword4", keyword4);
text.put("first", first);
text.put("remark",remark);
JSONObject json=new JSONObject();
json.put("touser",openid); //消息接收人
json.put("template_id",Constants.PAY_OK_TEMPLATE_ID);//模板id
json.put("topcolor","#ff1a75");
json.put("data",text);
TemplateMsgResponse res = new TemplateMsgResponse();
String url2 = Constants.GET_TEMPLATEID_API.replace("ACCESS_TOKEN",accessToken);
JSONObject obj = WeiXinUtil.httpRequest(url2,"POST",json.toString());
if(!StringUtils.isEmpty(obj)){
res.setErrCode(String.valueOf(obj.get("errcode")));
res.setErrMsg((String)obj.get("errmsg"));
res.setMsgId(obj.get("msgid")+"");
}
return res;
}
结合微信公众号开发文档,消息实体类字段如下:
public class TemplateMsgResponse implements Serializable {
private String msgId;
private String errCode;
private String errMsg;
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
}