公眾號傳送模板資訊java實現(主動傳送)

Shen Yiting發表於2021-01-01

效果

在這裡插入圖片描述

以測試公眾號為例

  1. 點選進入 測試公眾號
  2. 官方教程在這裡插入圖片描述
  3. 點選新增目標模板在這裡插入圖片描述
    在這裡插入圖片描述
  4. 程式碼

WxTemplate 類

package com.project.voicememoassistant.model;

import java.util.Map;

public class WxTemplate {

    /**
     * 模板訊息id
     */
    private String template_id;
    /**
     * 使用者openId
     */
    private String touser;
    /**
     * URL置空,則在傳送後,點選模板訊息會進入一個空白頁面(ios),或無法點選(android)
     */
    private String url;
    /**
     * 標題顏色
     */
    private String topcolor;
    /**
     * 詳細內容
     */
    private Map<String,TemplateData> data;

    public String getTemplate_id() {
        return template_id;
    }
    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }
    public String getTouser() {
        return touser;
    }
    public void setTouser(String touser) {
        this.touser = touser;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getTopcolor() {
        return topcolor;
    }
    public void setTopcolor(String topcolor) {
        this.topcolor = topcolor;
    }
    public Map<String, TemplateData> getData() {
        return data;
    }
    public void setData(Map<String, TemplateData> data) {
        this.data = data;
    }
}

TemplateData 類

package com.project.voicememoassistant.model;

public class TemplateData {
    private String value;
    private String color;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
}

傳送方法
openId就是關注的使用者列表中的微訊號
在這裡插入圖片描述

package com.project.voicememoassistant.tools;

import com.project.voicememoassistant.model.TemplateData;
import com.project.voicememoassistant.model.WxTemplate;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

public class WechatSendTemplate {
    public static String appID = "這裡寫上自己的APPID";
    public static String appsecret = "這裡寫上自己的APPsecret";

    /***
     * 提醒事件查詢
     * @param openId
     * @param keyValue1 待完成目標的內容
     */
    public static void sendTemplate(String openId,String keyValue1){
        String token = getAccessToken();
        String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
        WxTemplate wxTemplate = new WxTemplate();
        wxTemplate.setTemplate_id("這裡寫上你之前新建的模板id");
        wxTemplate.setTouser(openId);
        wxTemplate.setUrl("https://cn.bing.com/");
        wxTemplate.setTopcolor("#FF0000");
        Map<String, TemplateData> map = new HashMap<>();
        TemplateData first = new TemplateData();
        first.setColor("#868586");
        first.setValue("這裡填寫你要傳送的模板資訊");
        map.put("first", first);
        TemplateData keyword1 = new TemplateData();
        keyword1.setColor("#173177");
        keyword1.setValue(keyValue1);
        map.put("keyword1",keyword1);
        wxTemplate.setData(map);
        JSONObject json = JSONObject.fromObject(wxTemplate);//將java物件轉換為json物件
        RestTemplate restTemplate = new RestTemplate();
        Object forObject = restTemplate.postForObject(url,json,Object.class);
        System.out.println(forObject);//列印是否傳送成功
    }

    /**
     * 網頁授權access_token
     */
    public static String getAccessToken() {
        RestTemplate restTemplate = new RestTemplate();
        String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?appid="+appID+"&secret="+appsecret+"&grant_type=client_credential";
        Object forObject = restTemplate.getForObject(access_token_url, Object.class);
        JSONObject jsonToken = JSONObject.fromObject(forObject);
        String token = null;
        if (StringUtils.isNotBlank(String.valueOf(jsonToken))) {
            token = jsonToken.getString("access_token");
        }
        return token;
    }
}

可能需要pom.xml上加的依賴

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib-ext-spring</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
  1. 可以用springboot的定時方式來傳送

相關文章