1. 开通订阅消息
2. 选用模板
订阅消息 - 公共模板库 - 选用
3. 选择关键词
勾选关键词 - 最多勾选5个 - 显示例子
4. 我的模板
5. 订阅号开发者-文档: 发送订阅消息 | 微信开放文档
6. 依赖
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.32</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.3</version>
</dependency>
7. MessageVo
import lombok.Data;
import java.util.Map;
/**
* 封装请求参数
*/
@Data
public class MessageVo {
// 接收者(用户)的 openid
private String touser;
// 订阅消息模板id
private String template_id;
// 默认跳到小程序首页
private String page = "pages/index/index";
// 推送文字
private Map<String, TemplateData> data;
// developer为开发版;trial为体验版;formal为正式版;默认为正式版
private String miniprogram_state;
// zh_CN(简体中文)
private String lang;
}
8. TemplateData
import lombok.Data;
/**
* 封装订阅消息内容
*/
@Data
public class TemplateData {
private String value;
public TemplateData(String value){
this.value = value;
}
}
9. SendMessage
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class SendMessage {
/**
* 发送订阅消息
* @return
*/
public String send(){
RestTemplate restTemplate = new RestTemplate();
// url + access_token(接口调用凭证)
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + "access_token";
// 拼接推送的模板
MessageVo vo = new MessageVo();
// 要发送给哪个用户 (动态传进来)
vo.setTouser("用户openid");
vo.setTemplate_id("模板id");
// 必填(否)
vo.setPage("pages/index/index");
// developer为开发版;trial为体验版;formal为正式版;默认为正式版
vo.setMiniprogram_state("developer");
// 语言类型
vo.setLang("zh_CN");
Map<String, TemplateData> map = new HashMap<>(5);
/**封装模板消息内容, 必须和你申请的小程序模板格式一模一样, 并一一对应*/
// 商品名称
map.put("thing1",new TemplateData("商品名称"));
// 支付时间
map.put("time2",new TemplateData("支付时间"));
// 支付金额
map.put("amount3",new TemplateData("支付金额"));
// 订单号
map.put("character_string4",new TemplateData("订单号"));
// 支付方式
map.put("thing5",new TemplateData("支付方式"));
vo.setData(map);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, vo, String.class);
String bodyAsString = responseEntity.getBody();
JSONObject json = JSON.parseObject(bodyAsString);
String errcode = json.getString("errcode");
String errmsg = json.getString("errmsg");
if (("ok").equals(errmsg)) {
log.info("发送订阅消息成功: {}", bodyAsString);
} else {
log.info("发送订阅消息失败: {}", bodyAsString);
}
return bodyAsString;
}
}