最近在研究使用微信公众号推送消息,这里简单记录下,以便后续追踪:
1、首先注册测试版微信公众号,地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421137522
点击进入微信公众账号申请系统,然后使用自己的微信扫描即可。
注册完毕,配置模板,具体格式可参见微信的说明:{{xx.DATA}}基本都是使用该格式,字段需要与我们实体定义的字段一致
例如:配置模板如下:
{{first.DATA}}
用户昵称:{{keyword1.DATA}}
绑定时间:{{keyword2.DATA}}
详情:{{keyword3.DATA}}
备注:{{remark.DATA}}
则定义实体为:
package com.soyunn.device.send.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @Author: AaronNg
* @Title: AlarmParamsDTO
* @Package: com.soyunn.device.send.dto
* @Description: 微信模板相关实体
* @Date 2019/8/18 15:59
* @Version 1.0
**/
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class AlarmParamsDTO {
//在配置模板的时,格式一般如下
/**
* {
{first.DATA}
}
用户昵称:{
{keyword1.DATA}
}
绑定时间:{
{keyword2.DATA}
}
备注:{
{keyword3.DATA}
}
{
{remark.DATA}
}
**/
private String first;
private String keyword1;
private String keyword2;
private String keyword3;
private String keyword4;
private String remark;
}
service接口类如下:
package com.soyunn.device.send.wechatPublicAccount.service;
import com.soyunn.device.send.dto.AlarmParamsDTO;
/**
* @Author: AaronNg
* @Title: PushMessageService
* @Package: com.soyunn.device.send.wechatPublicAccount.service
* @Description: 微信公众号推送接口
* @Date 2019/8/18 15:41
* @Version 1.0
**/
public interface PushMessageService {
void pushMessage(AlarmParamsDTO paramsDTO);
}
service实现如下:
package com.soyunn.device.send.wechatPublicAccount.service.impl;
import com.soyunn.device.send.dto.AlarmParamsDTO;
import com.soyunn.device.send.wechatPublicAccount.service.PushMessageService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
/**
* @Author: AaronNg
* @Title: PushMessageServiceImpl
* @Package: com.soyunn.device.send.wechatPublicAccount.service
* @Description:
* @Date 2019/8/18 15:49
* @Version 1.0
**/
@Service
@Slf4j
public class PushMessageServiceImpl implements PushMessageService {
@Override
public void pushMessage(AlarmParamsDTO alarmParamsDTO) {
//1,配置
WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
/**
* 测试号信息
* appID :
* appsecret :
**/
wxStorage.setAppId("公众号appid");
wxStorage.setSecret("公众号secret");
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxStorage);
List<WxMpTemplateData> wxMpTemplateData = Arrays.asList(
new WxMpTemplateData("first",alarmParamsDTO.getFirst()),
new WxMpTemplateData("keyword1",alarmParamsDTO.getKeyword1()),
new WxMpTemplateData("keyword2",alarmParamsDTO.getKeyword2()),
new WxMpTemplateData("keyword3",alarmParamsDTO.getKeyword3()),
new WxMpTemplateData("remark",alarmParamsDTO.getRemark())
);
//2,推送消息
WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
.toUser("要推送的用户openid,查看关注列表")
.templateId("模版id,查看模板列表")
.data(wxMpTemplateData)
.build();
try {
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
} catch (Exception e) {
System.out.println("推送失败:" + e.getMessage());
}
}
}
这里需要添加下maven依赖
<!--微信模版消息推送三方sdk-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.3.0</version>
</dependency>
编写测试
package com.soyunn.device.controller;
import com.soyunn.device.send.dto.AlarmParamsDTO;
import com.soyunn.device.send.wechatPublicAccount.service.PushMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: AaronNg
* @Title: WechatPublicAccountController
* @Package: com.soyunn.device.controller
* @Description:
* @Date 2019/8/18 20:57
* @Version 1.0
**/
@RestController
@RequestMapping("/test")
public class WechatPublicAccountController {
@Autowired
PushMessageService pushMessageService;
@RequestMapping("/sendMessage")
public String sendMessage(){
AlarmParamsDTO dto = new AlarmParamsDTO("指标报警", "111", "222", "33", null, "测试");
pushMessageService.pushMessage(dto);
return "success";
}
}
请求:http://localhost:8080/test/sendMessage
即可推送信息到指定的公众号