-
Notifications
You must be signed in to change notification settings - Fork 627
微信模板消息发送
sqmax edited this page Sep 21, 2018
·
4 revisions
微信模板消息的接口在微信公众平台的模板消息接口章节
我们下拉到发送模板消息部分,可以看到如下的接口调用请求说明:
http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
可以看到微信要求这是一个post请求,而且给出了如下一个post示例:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"miniprogram":{
"appid":"xiaochengxuappid12345",
"pagepath":"index?foo=bar"
},
"data":{
"first": {
"value":"恭喜你购买成功!",
"color":"#173177"
},
"keynote1":{
"value":"巧克力",
"color":"#173177"
},
"keynote2": {
"value":"39.8元",
"color":"#173177"
},
"keynote3": {
"value":"2014年9月22日",
"color":"#173177"
},
"remark":{
"value":"欢迎再次购买!",
"color":"#173177"
}
}
}
上面参数的说明文档已说明清楚,可以看到必须要传入的参数有,touser是接受者的openid,然后还有必填项template_id,data是什么东西呢。这是在自己的公众号里设置的,由于我们个人的公众号权限不够,这里可以到申请的测试账号里设置,填写模板消息的界面如下:
看到需要填写这么多请求参数,是不是觉得自己构造请求会很复杂,不用担心,我们仍然可以有现成的SDK可以使用,weixin-java-tools,来到SDK文档说明的MP_发送模板消息部分,我们可以看到使用方式非常简单,仅仅需要构造一个WxMpTemplateMessage对象,传入动态的参数,然后使用WxMpService的sendTemplateMsg(templateMessage),模板消息就发送成功了。
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser(...)
.templateId(...)
.url(...)
.build();
templateMessage.getData().add(new WxMpTemplateData(name1, value1, color2));
templateMessage.getData().add(new WxMpTemplateData(name2, value2, color2));
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
在我们自己的项目里,我们可以按如下的方式使用:
WxMpTemplateMessage templateMessage=new WxMpTemplateMessage();
templateMessage.setTemplateId(accountConfig.getTemplateId().get("orderStatus"));//我们把模板消息得templateId写在我们的配置文件里了所以可以这样使用
templateMessage.setToUser(orderDTO.getBuyerOpenid());//openid:"ozswp1Ojl2rA57ZK97ntGw2WQ2CA"
List<WxMpTemplateData> data= Arrays.asList(
new WxMpTemplateData("first","亲,记得收货"),
new WxMpTemplateData("keyword1","微信点餐"),
new WxMpTemplateData("keyword2","15712363915"),
new WxMpTemplateData("keyword3",orderDTO.getOrderId()),
new WxMpTemplateData("keyword4",orderDTO.getOrderStatusEnum().getMessage()),
new WxMpTemplateData("keyword5","¥"+orderDTO.getOrderAmount()),
new WxMpTemplateData("remark","欢迎再次光临"));
templateMessage.setData(data);
try {
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
}catch (WxErrorException e){
log.error("【微信模板消息】发送失败,{}",e);
}
最后我们是在处理订单的Service里的完结订单方法里使用推送模板消息的PushMessageService业务对象的。
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMasterRepository orderMasterRepository;
@Autowired
private PushMessageService pushMessageService;
@Autowired
private WebSocket webSocket;
@Override
@Transactional
public OrderDTO finish(OrderDTO orderDTO) {
//判断订单状态
if(!orderDTO.getOrderStatus().equals(OrderStatusEnum.NEW.getCode())){
log.error("【完结订单】 订单状态不正确,orderId={},orderStatus={}",orderDTO.getOrderId(),orderDTO.getOrderStatus());
throw new SellException(ResultEnum.ORDER_STATUS_ERROR);
}
//修改订单状态
orderDTO.setOrderStatus(OrderStatusEnum.FINISHED.getCode());
OrderMaster orderMaster=new OrderMaster();
BeanUtils.copyProperties(orderDTO,orderMaster);
OrderMaster updateResult=orderMasterRepository.save(orderMaster);
if(updateResult==null){
log.error("【完结订单】更新失败,orderMaster={}",orderMaster);
throw new SellException(ResultEnum.ORDER_UPDATE_FAIL);
}
//推送微信模板消息
pushMessageService.orderStatus(orderDTO);
return orderDTO;
}
这样关注我们公众号的用户就可以收到如下样式的提醒消息。
目录