Java 微信公众号消息模板推送

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;
    }
}

发布了11 篇原创文章 · 获赞 1 · 访问量 2676
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章