- 小程序前端做好消息订阅的准备工作
- Java后端将数据按照消息模板的格式,推送给微信用户
本博文主要讲述:Java后端如何将数据按照消息模板的格式,推送给微信用户
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
access_token | string | 是 | 接口调用凭证,该参数为 URL 参数,非 Body 参数。使用access_token或者authorizer_access_token |
template_id | string | 是 | 所需下发的订阅模板id |
page | string | 否 | 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转 |
touser | string | 是 | 接收者(用户)的 openid |
data | string | 是 | 模板内容,格式形如 { “key1”: { “value”: any }, “key2”: { “value”: any } }的object |
miniprogram_state | string | 是 | 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 |
lang | string | 是 | 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN |
属性 | 类型 | 说明 |
---|---|---|
errcode | number | 错误码 |
errmsg | string | 错误信息 |
public static JSONObject getBillData(Bill bill){
JSONObject createTime = new JSONObject();
createTime.put("value", DateUtils.parseDateToStr("yyyy/MM/dd HH:mm:ss", bill.getCreateTime()));
JSONObject houseName = new JSONObject();
houseName.put("value", bill.getTenantHouseName());
JSONObject landlordName = new JSONObject();
landlordName.put("value", bill.getLandlordName());
JSONObject totalCost = new JSONObject();
totalCost.put("value", bill.getTotalCost()+"元");
JSONObject jsonObject = new JSONObject();
jsonObject.put("time5", createTime);
jsonObject.put("thing1", houseName);
jsonObject.put("thing2", landlordName);
jsonObject.put("amount3", totalCost);
log.info(jsonObject.toJSONString());
return jsonObject;
}
public static JSONObject sentBillMessage(RestTemplateUtils restTemplateUtils, User user, Bill bill){
try {
String accessToken = getAccessToken(TENANT_APPID);
JSONObject paramMap = new JSONObject();
paramMap.put("access_token", accessToken);
paramMap.put("touser", user.getTenantOpenId());
paramMap.put("template_id", "zrnNqXdbDZFVlhEew5LfQ2nOW8pUG5CdJ4Vw1J__S5Q");
paramMap.put("data", getBillData(bill));
paramMap.put("page", "pages/main/main");
JSONObject body = restTemplateUtils.getRestTemplate().postForEntity("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+accessToken, paramMap, JSONObject.class).getBody();
log.info(body.toJSONString());
return body;
}catch (Exception e){
e.printStackTrace();
log.error("sentMessage bill="+bill.toString()+", user="+ user.toString());
}
return null;
}
public static String getAccessToken(String appId){
String objectStr="";
try {
objectStr = HttpUtil.get(String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s",appId, getAppSecret(appId)));
JSONObject jsonObject = JSON.parseObject(objectStr);
return jsonObject.getString("access_token");
}catch (Exception e){
e.printStackTrace();
}
return null;
}
page
参数不填的话,默认否。即没有进入小程序查看
的按钮觉得好,就一键三连呗(点赞+收藏+关注)