官网:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
需要注意 订阅消息参数值内容限制说明,下图只是一部分:
public String sendNews(String orderId) {
String accesstoken = wxService.getAccesstoken();
TicketOrder ticketOrder = ticketOrderDao.findTicketOrderByOrderId(orderId);
String errcode = null;
String errmsg = null;
if (ticketOrder != null) {
// 调用接口
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accesstoken;
JSONObject params = new JSONObject();
JSONObject dataJson = new JSONObject();
JSONObject phraseJson = new JSONObject();
phraseJson.put("value", "出票成功");
JSONObject thingJson = new JSONObject();
thingJson.put("value", ticketOrder.getStartStateName() + "一" + ticketOrder.getEndStateName());
JSONObject timeJson = new JSONObject();
Date departDateTime = ticketOrder.getDepartDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
timeJson.put("value", simpleDateFormat.format(departDateTime));
JSONObject thing5Json = new JSONObject();
thing5Json.put("value", "请凭有效身份证到车站取票,祝您乘车愉快");
dataJson.put("phrase1", phraseJson);
dataJson.put("thing2", thingJson);
dataJson.put("time3", timeJson);
dataJson.put("thing5", thing5Json);
params.put("access_token ", accesstoken);
params.put("touser", userMapper.getUserByUserid(ticketOrder.getUserId()).getOpenid()); // openid
params.put("template_id", "21PCGCTlRMYE-wx4SVucVEngyNFBG7iw9sgZ6dCpeQA"); // 模板id
params.put("data", dataJson);
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
String s = restTemplate.postForEntity(url, params, String.class).getBody();
if (s != null) {
JSONObject jsonObject = JSONObject.parseObject(s);
errcode = jsonObject.getString("errcode");
errmsg = jsonObject.getString("errmsg");
}
} catch (Exception e) {
log.error("服务号消息接口失败:{} " + e);
}
if (!errcode.equals("0")) {
log.error("服务号消息发送失败:code=" + errcode + "msg=" + errmsg);
}
}
return errcode;
}