Fork me on GitHub

微信消息模版推送

微信公众平台创建模版

https://mp.weixin.qq.com/
先查看APPID和AppSecret
image
创建模版获取模版ID及相关参数
image

代码

pom.xml

        <!-- 微信公众号消息推送 -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>4.6.0</version> <!-- 最新稳定版 -->
        </dependency>
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-common</artifactId>
            <version>4.6.0</version> <!-- 确保版本一致 -->
        </dependency>

WXConfig.java配置类

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 微信公众号配置类
 */
@Configuration
public class WXConfig {

    @Bean
    public WxMpService wxMpService() {
        // 1. 配置公众号信息
        WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
        // 替换成AppID和AppSecret
        config.setAppId("AppID");
        config.setSecret("AppSecret");
        WxMpService wxService = new WxMpServiceImpl();
        wxService.setWxMpConfigStorage(config);
        return wxService;
    }
}

AbstractWXTemplateService模版消息抽象类

import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * 微信公众号通知模版抽象类
 */
public abstract class AbstractWXTemplateService {

    /**
     * 用指定的参数构建WxMpTemplateMessage对象
     * @param templateId 模版id
     * @param openid 用户openid
     * @param url 点击模版消息跳转的链接
     * @param data 模版数据
     * @return
     */
    protected WxMpTemplateMessage buildTemplateMessage(String templateId, String openid, String url, WxMpTemplateData... data) {
        return WxMpTemplateMessage.builder()
                .toUser(openid)
                .templateId(templateId)
                .url(url)
                .data(Arrays.asList(data))
                .build();
    }

    protected String getCurrentTimestamp() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
}

消息发送实现类

实现类1(对应一个模版消息)

import me.chanjar.weixin.mp.api.WxMpService;
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.List;

@Service
public class WXLoginAuthNoticeImpl extends AbstractWXTemplateService {

    @Autowired
    private WxMpService wxMpService;

    public void sendLoginNotification(List<String> userList, String accountName, String loginIp) {
        for (String openid : userList) {
            try {
                WxMpTemplateMessage templateMessage = buildTemplateMessage(
                        "模版ID",
                        openid,
                        "http://callbackurl" + accountName,
                        new WxMpTemplateData("time1", getCurrentTimestamp(), "#173177"),
                        new WxMpTemplateData("thing2", accountName, "#173177"),
                        new WxMpTemplateData("character_string3", loginIp, "#173177")
                );
                String msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
                System.out.println("Message sent successfully, OpenID=" + openid + ", MsgID=" + msgId);
            } catch (Exception e) {
                System.err.println("Message sending failed, OpenID=" + openid + ", Error: " + e.getMessage());
            }
        }
    }
}

实现类2(对应另一个模版消息)


import me.chanjar.weixin.mp.api.WxMpService;
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.List;

@Service
public class WXAlarmMsgImpl extends AbstractWXTemplateService {

    @Autowired
    private WxMpService wxMpService;

    public void sendServerAlert(List<String> userList, String errorMsg) {
        for (String openid : userList) {
            try {
                WxMpTemplateMessage templateMessage = buildTemplateMessage(
                        "E_PXClp9Usl91OhY模版ID", // Template ID
                        openid,
                        null,
                        new WxMpTemplateData("first", "Server Offline Alert", "#FF0000"),
                        new WxMpTemplateData("keyword1", errorMsg, "#173177"),
                        new WxMpTemplateData("keyword2", getCurrentTimestamp(), "#173177"),
                        new WxMpTemplateData("remark", "Please handle it as soon as possible!", "#FF0000")
                );
                String msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
                System.out.println("Message sent successfully, OpenID=" + openid + ", MsgID=" + msgId);
            } catch (Exception e) {
                System.err.println("Message sending failed, OpenID=" + openid + ", Error: " + e.getMessage());
            }
        }
    }
}
posted @ 2025-09-09 21:26  秋夜雨巷  阅读(49)  评论(0)    收藏  举报