模板字段
模板字段对应的写法
String wxTemplateId = #模板id#;
Map<String, WeiXinTemplateMsg> sendMag = new HashMap<>();
sendMag.put("thing1", new WeiXinTemplateMsg(truncateString(content.get("content").toString(),20)));//系统
sendMag.put("character_string2",new WeiXinTemplateMsg(content.get("petitionNumber").toString()));
sendMag.put("thing3", new WeiXinTemplateMsg(systemDict.getDicName()));
sendMag.put("time5", new WeiXinTemplateMsg(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));//内容
wxApiService.sendMessage(wxBinding.getWxOpenId(),wxTemplateId,sendMag);
微信各个值实体
@Data
public class WeiXinTemplateMsg {
/**
* 消息
*/
private String value;
public WeiXinTemplateMsg(String value) {
this.value = value;
}
}
发消息service
@Service
public class WxApiServiceImpl implements WxApiService {
@Autowired
private Environment env;
@Autowired
private RestTemplate restTemplate;
@Override
public String getAccessToken(){
String appId = env.getProperty("cbs.weixin.appId");
String appSecret = env.getProperty("cbs.weixin.appSecret");
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId +"&secret=" + appSecret;
String res = HttpUtil.get(url);
log.info("getAccessToken 返回结果:" + res);
WxGetTokenResult result = JSONObject.parseObject(res, WxGetTokenResult.class);
//缓存token
String accessToken = result.getAccess_token();
if(StrUtil.isEmpty(result.getErrmsg())){
RedisUtil.set(NettyCacheConst.WxAccessToken, accessToken, result.getExpires_in() - 100);
}
return accessToken;
}
@Override
public WxSendMsgResult sendMessage(String openId, String msgTemplateId, Map<String, WeiXinTemplateMsg> data){
String accessToken = RedisUtil.get(NettyCacheConst.WxAccessToken);
if(StrUtil.isEmpty(accessToken)){
accessToken = getAccessToken();
}
// 微信的基础accessToken
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/bizsend?access_token=" + accessToken;
//拼接base参数
Map<String, Object> sendBody = new HashMap<>();
sendBody.put("touser", openId); // openId
sendBody.put("data", data); // 模板参数
sendBody.put("template_id", msgTemplateId); // 模板Id
ResponseEntity<String> forEntity = restTemplate.postForEntity(url, sendBody, String.class);
log.info("sendMessage 结果是: {}", forEntity.getBody());
WxSendMsgResult result = JSONObject.parseObject(forEntity.getBody(), WxSendMsgResult.class);
return result;
}
}
需要成功发送消息需要用户订阅该消息可以采用公众号发订阅通知,用户去点击同意此订阅发消息
具体微信接口文档:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/One-time_subscription_info.html