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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章