1.新建service接口
/**
* 推送消息
*/
public interface PushMessageService {
/**
* 订单状态变更消息
*/
void orderStatus(OrderDTO orderDTO);
}
@Service
@Slf4j
public class PushMessageServiceImpl implements PushMessageService {
@Autowired
private WxMpService wxMpService;
@Autowired
private WechatAccountConfig accountConfig;
@Override
public void orderStatus(OrderDTO orderDTO) {
WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
templateMessage.setTemplateId(accountConfig.getTemplateId().get("orderStatus"));//模板id
templateMessage.setToUser(orderDTO.getBuyerOpenid());//推送给谁
//内容按照模板详情里给出的来写
List<WxMpTemplateData> data = Arrays.asList(
new WxMpTemplateData("first", "亲,请记得收货。"),
new WxMpTemplateData("keyword1", "微信点餐"),
new WxMpTemplateData("keyword2", "18868812345"),
new WxMpTemplateData("keyword3", orderDTO.getOrderId()),
new WxMpTemplateData("keyword4", orderDTO.getOrderStatusEnum().getMessage()),
new WxMpTemplateData("keyword5", "¥" + orderDTO.getOrderAmount()),
new WxMpTemplateData("remark", "欢迎再次光临!")
);
templateMessage.setData(data);
try {
//与消息相关的操作都在getTemplateMsgService
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
}catch (WxErrorException e) {
log.error("【微信模版消息】发送失败, {}", e);
}
}
}
3.进行测试
4.在订单完结后推送消息
在finish方法后调用
可以在任意时候推送,看实际的需要
在发送消息时,发现异常并没有抛出,只是进行了日志记录,因为一旦抛出在订单完结finish()时就会回滚,订单状态就没有被修改,订单就没有完结。所以与消息有关操作一般不抛出异常,不能影响主要业务