点餐系统---消息01---微信模板消息推送

没有正式账号就在微信公众平台获取测试账号
点餐系统---消息01---微信模板消息推送_第1张图片

1.新建service接口

/**
 * 推送消息
 */
public interface PushMessageService {

    /**
     * 订单状态变更消息
     */
    void orderStatus(OrderDTO orderDTO);
}

2.实现接口
先将模板id配置
在这里插入图片描述

在这里插入图片描述

@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.进行测试
点餐系统---消息01---微信模板消息推送_第2张图片
4.在订单完结后推送消息
在finish方法后调用
点餐系统---消息01---微信模板消息推送_第3张图片
可以在任意时候推送,看实际的需要

在发送消息时,发现异常并没有抛出,只是进行了日志记录,因为一旦抛出在订单完结finish()时就会回滚,订单状态就没有被修改,订单就没有完结。所以与消息有关操作一般不抛出异常,不能影响主要业务

你可能感兴趣的:(#)