微信公众号推送消息

最近在研究使用微信公众号推送消息,这里简单记录下,以便后续追踪:

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

即可推送信息到指定的公众号

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值