说明:本文采用的是微信模板SDK开发,主要描述如何使用。
消息推送一共有两种,一种是客户端类似支付、下单完成等微信端的信息推送;另外一种就是后端管理页面的新消息的提醒(声音的提醒、弹框的提醒)。对于第一种,是微信端的消息推送,需要对微信模板的使用有所了解。第二种是后端提供服务的消息提醒。
客户模块的webSocket的使用:微信端的消息推送消息的最终效果如下图所示.
具体开发流程如下:
1.首先需要进入微信测试号配置模板(在公众号中可以直接选择,附测试号登陆地址: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login)
2.添加模板消息
{{first.DATA}} 商家名称:{{keyword1.DATA}} 商家电话:{{keyword2.DATA}} 订单号:{{keyword3.DATA}} 状态:{{keyword4.DATA}} 总价:{{keyword5.DATA}} {{remark.DATA}}
3.首先需要添如下的SDK,在该SDK中有微信授权登录、微信支付、支付宝支付、消息推送等接口,可供直接传入参数调用。(地址:https://github.com/Wechat-Group/WxJava)Maven管理加载以下依赖:
<!--wx SDK依赖--> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>2.8.0</version> </dependency>
4.设计接口。为什么需要设计接口呢?因为我们需要把模里面的参数一一传入,实现不同订单对应不同的消息。在发送消息的模板的时候是使用SDK中的wxMpService.getTemplateMsgService().sendTemplateMsg()这个接口,而参数就是WxMpTemplateMessag对象,在这个对象中可以将模板消息塞进去,最后直接发送此对象就行。本文的模板ID是放在配置文件中的,因此注入的配置文件类WechartAccountConfig
5.根据业务将模板中的信息动态的传入,然后调发送消息的Service,至此完成了消息的发送。最后在业务需求的地方直接调用此接口就可以完成一次消息的推送。具体实现如下代码:
@Slf4j @Service public class PushMessageServiceimpl implements PushMessageService { @Autowired private WxMpService wxMpService; @Autowired private WechartAccountConfig wechartAccountConfig; @Override public void orderStatus(OrderDto orderDto) { //调用SDK发送消息 WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage(); wxMpTemplateMessage.setTemplateId(wechartAccountConfig.getTemplateId().get("orderStatus")); wxMpTemplateMessage.setToUser("o6oCR0ZptF_U1lkn1LgIST5o-Wwk"); List<WxMpTemplateData> data = Arrays.asList( new WxMpTemplateData("first","亲,记得收货哦!"), new WxMpTemplateData("keyword1","湖北xx学院"), new WxMpTemplateData("keyword2","11111111111"), new WxMpTemplateData("keyword3",orderDto.getOrderId()), new WxMpTemplateData("keyword4",orderDto.getOrderAmountEnum().getMessage()), new WxMpTemplateData("keyword5","¥"+ orderDto.getOrderAmount()), new WxMpTemplateData("remark","欢迎下次光临") ); wxMpTemplateMessage.setData(data); try { wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage); } catch (WxErrorException e) { log.error("【消息推送】发送失败"+e); e.printStackTrace(); } } }