功能描述
小程序单次授权后,用于发送订阅消息。
调用方式 HTTPS 调用
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
入参格式
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"miniprogram_state":"developer",
"lang":"zh_CN",
"data": {
"number01": {
"value": "339208499"
},
"date01": {
"value": "2015年01月05日"
},
"site01": {
"value": "TIT创意园"
} ,
"site02": {
"value": "广州市新港中路397号"
}
}
}
请求参数
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
access_token / cloudbase_access_token | string | 是 | 接口调用凭证,该参数为 URL 参数,非 Body 参数。access_token和cloudbase_access_token二选一 其中access_token可通过getAccessToken接口获得; 如果是第三方代调用请传入authorizer_access_token; cloudbase_access_token可通过getOpenData接口获得 |
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 |
代码示例
private static final String WXAPPLETURl="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=";
public void uniformMessageSend(OrderStateDto info) {
RestTemplate restTemplate = new RestTemplate();
//redis存储ACCESS_TOKEN,需要定时刷新,两小时失效
String url = WXAPPLETURl + redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY);
//拼接推送的模版
/**
* {
* "touser": "oJkRK4_pWN0",
* "template_id": "Yk3_M11Pw5rabllnNwD9OKsyvUSoWg",
* "page": "index",
* "miniprogram_state":"developer",
* "lang":"zh_CN",
* "data": {
* "character_string1": {
* "value": "2022081214472943380"
* },
* "thing16": {
* "value": "22704967"
* },
* "thing9": {
* "value": "商品"
* },
* "thing13": {
* "value": "测试"
* },
* "phrase2": {
* "value": "已送达"
* }
* }
* }
*/
OrderStateMsgVo orderStateMsgVo = new OrderStateMsgVo();
orderStateMsgVo.setTouser(info.getOpenId());//用户的openId
orderStateMsgVo.setTemplate_id(info.getTemplateId());//订阅消息模板id
orderStateMsgVo.setPage(info.getPage());
Map<String, WxTemplateData> m = new HashMap<>(5);
m.put("character_string1", new WxTemplateData(info.getOrderNo()));
m.put("thing9", new WxTemplateData(info.getGoodsName()));
m.put("phrase2", new WxTemplateData(info.getOrderState()));
m.put("thing13", new WxTemplateData(info.getAddressArea()));
m.put("thing16", new WxTemplateData(info.getTakeCode()));
orderStateMsgVo.setData(m);
String s = JSONUtil.toJsonStr(orderStateMsgVo);
log.info(s);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, orderStateMsgVo, String.class);
log.info(responseEntity.getBody());
}
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.util.Map;
@Data
@ApiModel(value = "OrderStateMsgVo", description = "订单状态通知")
public class OrderStateMsgVo {
private String touser;//用户openid
private String template_id;//订阅消息模版id
private String miniprogram_state="developer";//跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
private String lang="zh_CN";//进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
private String page;//默认跳到小程序首页
private Map<String, WxTemplateData> data;//推送文字
}
import lombok.AllArgsConstructor;
import lombok.Data;
@AllArgsConstructor
@Data
public class WxTemplateData {
private String value;
}
/**启动类中添加
**/
@Bean
RestTemplate getRestTemplate(){
RestTemplate restTemplate = new RestTemplate();
//解决中文乱码问题
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>