Java開發微信公眾號模板消息【同步|異步】


第一步:申請模板消息功能並添加模板

在微信公眾平台找到你需要的模板,並添加上即可;

 

第二步:添加功能模塊后開始開發

 

功能中使用的類及代碼:

發送數據主實體類:

Template.java
復制代碼
package com.wfcm.wxUitls;

import org.apache.commons.lang.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class Template {

    // 消息接收方
    private String toUser;
    // 模板id
    private String templateId;
    // 模板消息詳情鏈接
    private String url;
    // 消息頂部的顏色
    private String topColor;
    // 參數列表
    private List<TemplateParam> templateParamList;
    //省略getter、setter方法

    //按微信接口要求格式化模板
    public String toJSON() {
        StringBuffer buffer = new StringBuffer();
        buffer.append("{");
        buffer.append(String.format("\"touser\":\"%s\"", this.toUser)).append(",");
        buffer.append(String.format("\"template_id\":\"%s\"", this.templateId)).append(",");
        buffer.append(String.format("\"url\":\"%s\"", this.url)).append(",");
        buffer.append(String.format("\"topcolor\":\"%s\"", this.topColor)).append(",");
        buffer.append("\"data\":{");
        TemplateParam param = null;
        for (int i = 0; i < this.templateParamList.size(); i++) {
            param = templateParamList.get(i);
            // 判斷是否追加逗號
            if (i < this.templateParamList.size() - 1){

                buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"},", param.getName(), param.getValue(), param.getColor()));
            }else{
                buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"}", param.getName(), param.getValue(), param.getColor()));
            }

        }
        buffer.append("}");
        buffer.append("}");
        return buffer.toString();
    }

    public String getToUser() {
        return toUser;
    }

    public void setToUser(String toUser) {
        this.toUser = toUser;
    }

    public String getTemplateId() {
        return templateId;
    }

    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }

    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 List<TemplateParam> getTemplateParamList() {
        return templateParamList;
    }

    public void setTemplateParamList(List<TemplateParam> templateParamList) {
        this.templateParamList = templateParamList;
    }
}
復制代碼

TemplateParam.java
復制代碼
package com.wfcm.wxUitls;

import java.util.ArrayList;
import java.util.List;

public class TemplateParam {

    private String name;
    private String value;
    private String color;

    public TemplateParam(String name, String value, String color) {
        this.name = name;
        this.value = value;
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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;
    }
}
復制代碼

HttpUtil.java
復制代碼
package com.wfcm.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils;



public class HttpUtil {
    /**
     * 向指定 URL 發送POST方法的請求
     *
     * @param url   發送請求的 URL
     * @param param 請求參數,請求參數應該是 name1=value1&name2=value2 的形式。
     * @return 所代表遠程資源的響應結果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打開和URL之間的連接
            HttpURLConnection conn = (HttpURLConnection) realUrl
                    .openConnection();
            // 設置通用的請求屬性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 發送POST請求必須設置如下兩行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 獲取URLConnection對象對應的輸出流
            out = new PrintWriter(conn.getOutputStream());
            // 發送請求參數
            out.print(param);
            // flush輸出流的緩沖
            out.flush();
            // 定義BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(new InputStreamReader(
                    conn.getInputStream(), "utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("發送 POST 請求出現異常!" + e);
            e.printStackTrace();
        }
        // 使用finally塊來關閉輸出流、輸入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}
復制代碼

 

 Demo : 其中accessToken 如何獲取就不詳細講了。

復制代碼
@Test
    public void test(String tplId,String openId) {
//      String tplId = "Z7CfpaavOr7JT5MMH98IvXzpn4A0bJbguKSQYMEh5Iw";
//      String openId = "oBkmD01XLbYdT";
        Template tem=new Template();
        tem.setTemplateId(tplId);
        tem.setTopColor("#ffab17");

        List<TemplateParam> paras=new ArrayList<TemplateParam>();
        paras.add(new TemplateParam("first","您好,恭喜您成功購買商品","#ffab17"));
        paras.add(new TemplateParam("keyword1","支付金額200","#ffab17"));
        paras.add(new TemplateParam("keyword2", "小學語文","#ffab17"));
        paras.add(new TemplateParam("keyword2", "1234567890","#ffab17"));
        paras.add(new TemplateParam("remark","先到先得!!!點擊立即學習","#ffab17"));
        tem.setTemplateParamList(paras);
        tem.setToUser(openId);//用戶openid
        //設置超鏈接
        tem.setUrl("https://newwf.wfkids.net/#/?1553247181");

        JSONObject jsonObject = sendTemplateMsg(tem);
        log.info("結果:"+jsonObject);
        System.out.println("結果:"+jsonObject);
    }


public JSONObject  sendTemplateMsg(Template template){
        //獲取token
        String token = "20_ZQvOMFYGY_uGeis_edeAD-U-yd2opdxxxxxx";
                log.info("wxAccessToken:"+token);
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
        requestUrl=requestUrl.replace("ACCESS_TOKEN", token);
        if (log.isDebugEnabled()) {
            log.debug(template.toJSON());
        }
        //發送模板消息,返回json格式結果
        log.info("json:"+ template.toJSON());
        String r = HttpUtil.sendPost(requestUrl, template.toJSON());
        JSONObject jsonObject= FastJSONUtils.getJSONObject(r);

        return jsonObject;
    }
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM