当前位置: 首页 > news >正文

微信消息模版推送

微信公众平台创建模版

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 {@Beanpublic WxMpService wxMpService() {// 1. 配置公众号信息WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();// 替换成AppID和AppSecretconfig.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 {@Autowiredprivate 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 {@Autowiredprivate WxMpService wxMpService;public void sendServerAlert(List<String> userList, String errorMsg) {for (String openid : userList) {try {WxMpTemplateMessage templateMessage = buildTemplateMessage("E_PXClp9Usl91OhY模版ID", // Template IDopenid,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());}}}
}
http://www.hskmm.com/?act=detail&tid=343

相关文章:

  • [豪の学习笔记] 软考中级备考 基础复习#5
  • 自我介绍+软工五问
  • 02020212 .NET Core重难点知识12-服务定位器、.NET依赖注入示例
  • 三数之和-leetcode
  • apache详细配置
  • 9.8总结
  • 相似了
  • 在 AlmaLinux 9 使用 Podman 部署 Redis 7.4.5 并优化内核参数
  • 抖音批量视频下载工具源码C#源码|自动提取DY视频的软件工具
  • AI 检测:精准攻克米饭盒质检难题,赋能食品生产
  • 2025年9月北京中学集训随笔
  • 最新可用Docker镜像加速站点
  • 第一周作业
  • 基于调度场算法将中缀表达式转换为后缀表达式
  • 来此加密实现SSL证书自动申请+自动部署
  • lc1022-从根到叶的二进制数之和
  • 2025.9.9——1橙
  • SIM /api/function/execute 代码执行漏洞
  • C#/.NET/.NET Core技术前沿周刊 | 第 53 期(2025年9.1-9.7)
  • 3
  • linux下安装pycharm时,中文无法显示的问题
  • 学习
  • Docker,Containerd配置私有Harbor仓库和Notary服务器
  • Ubuntu安装notary
  • Ubuntu安装containerd
  • 你的错误处理一团糟-是时候修复它了-️
  • TRVCOST - Travelling cost 题解
  • 我重新制作动画系统的思路
  • 第一次作业:自我介绍+软工5问
  • 第一篇练习博客