Java 微信公众号消息模板推送
可以在微信公众号中
开发==》开发者工具==》公众平台测试账号
申请测试账号用于测试
或者点击下面链接进入测试平台
微信公众平台
消息模板
用户姓名:{{userName.DATA}}
消费金额:{{consumeMoney.DATA}}
消费日期:{{consumeDate.DATA}}
引入pom.xml
<!--微信模版消息推送三方sdk-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.3.0</version>
</dependency>
WxPushUtil
package com.shiyu.clients.util;
import com.shiyu.clients.form.WxConsumeInfoForm;
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.result.WxMpUserList;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @auther abu
* @date 2019/12/26 18:17
*/
public class WxPushUtil {
private static final String APPID = "appid";
private static final String SECRET = "secret";
public static void pushConsumeInfo(WxConsumeInfoForm form) {
try {
//1,配置
WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
wxStorage.setAppId(APPID);
wxStorage.setSecret(SECRET);
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxStorage);
//2,推送消息
WxMpTemplateMessage templateMessage = new WxMpTemplateMessage();
templateMessage.setTemplateId(form.getTemplateId());
if (form.getUrl() != null && !form.getUrl().equals("")) {
templateMessage.setUrl(form.getUrl());
}
if(form.getAppid()!=null&&!form.getAppid().equals("")&&form.getPagePath()!=null&&!form.getPagePath().equals("")){
//设置小程序的appId和转发的页面
WxMpTemplateMessage.MiniProgram miniprograms = new WxMpTemplateMessage.MiniProgram();
miniprograms.setAppid(form.getAppid());
miniprograms.setPagePath(form.getPagePath());
templateMessage.setMiniProgram(miniprograms);
}
templateMessage.setData(form.getList());
if (form.getSendAll()) {
List<String> openList = new ArrayList<>();
openList = recursionOpenId(openList, null, wxMpService);
for (String id : openList) {
templateMessage.setToUser(id);//全部推送
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
}
} else {
templateMessage.setToUser(form.getOpenId());//要推送的用户openid
wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
}
} catch (Exception e) {
System.out.println("推送失败:" + e.getMessage());
e.printStackTrace();
}
}
/**
* 递归查询openId,一次最多拉取10000各个关注者的OpenId,可以多次拉取满足需求
*
* @param openIdList
* @param nextOpenId 第一次拉取的openId,不填默认从头开始拉取
* @param wxMpService
* @return
*/
public static List<String> recursionOpenId(List<String> openIdList, String nextOpenId, WxMpService wxMpService) {
try {
WxMpUserList openList = wxMpService.getUserService().userList(nextOpenId);
for (String strId : openList.getOpenids()) {
openIdList.add(strId);
}
if (openList.getOpenids().size() > 10000) {
recursionOpenId(openIdList, openList.getNextOpenid(), wxMpService);
}
} catch (WxErrorException e) {
e.printStackTrace();
}
return openIdList;
}
/**
* 测试
*/
public static void main(String[] args) {
WxConsumeInfoForm form = new WxConsumeInfoForm();
form.setTemplateId("模板ID");
String color = "#001EFF";//蓝色
//如果推送给全部用户
form.setSendAll(true);
//推送给的单个用户
//form.setOpenId("openID");
//有链接就加这条,没链接就删除
form.setUrl("baidu.com");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<WxMpTemplateData> wxMpTemplateData = new ArrayList<>();
wxMpTemplateData.add(new WxMpTemplateData("userName", "天梓", color));
wxMpTemplateData.add(new WxMpTemplateData("consumeMoney", "1998.88", color));
wxMpTemplateData.add(new WxMpTemplateData("consumeDate", sdf.format(new Date()), color));
form.setList(wxMpTemplateData);
WxPushUtil.pushConsumeInfo(form);
}
}
WxConsumeInfoForm
package com.shiyu.clients.form;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import java.io.Serializable;
import java.util.List;
public class WxConsumeInfoForm implements Serializable {
private static final long serialVersionUID = 2035293165820350664L;
//用户openId
private String openId;
//模板编号
private String templateId;
//小程序id
private String appid;
//小程序页面
private String pagePath;
//跳转地址
private String url;
//是否群发所有用户
private Boolean sendAll=false;
private List<WxMpTemplateData> list;
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getPagePath() {
return pagePath;
}
public void setPagePath(String pagePath) {
this.pagePath = pagePath;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<WxMpTemplateData> getList() {
return list;
}
public void setList(List<WxMpTemplateData> list) {
this.list = list;
}
public Boolean getSendAll() {
return sendAll;
}
public void setSendAll(Boolean sendAll) {
this.sendAll = sendAll;
}
}