1. 程式人生 > >java傳送微信模板訊息

java傳送微信模板訊息

咳咳,首先您看到這篇文章,恭喜你了

其它的文章都是幾個類的,並且工具類都要麼沒有提供,要麼就是殘缺不全的缺少jar呀什麼的。

本篇文章是將其整理成了一個類和一個http工具類。

1.封裝傳送模板訊息類

package com.core.utils;

import com.core.controller.KFController;
import net.sf.json.JSONObject;

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

/**
 * 傳送微信模板訊息
 * @Author: PengKe
 * @CreateDate: 2018/8/7 15:55
 * @Version: 1.0
 */
public class WxSendTemp {
    final private String appid = WxParam.appid; //appid自己填下哦
    final private String appSecret = WxParam.appSecret; // appSecret自己填下
    private String accessToken;

    /**
     * 獲取accessToken(根據業務量,不快取)
     */
    public void sendTemp(){
        String url = "https://api.weixin.qq.com/cgi-bin/token";
        String param = "grant_type=client_credential"+"&appid="+appid+"&secret="+appSecret;
        String accTemp = HttpSend.sendGet(url,param);
        JSONObject jsonObject = JSONObject.fromObject(accTemp);
        System.out.println("1--->"+jsonObject);
        accessToken = jsonObject.getString("access_token"); // 獲取到了access_token,呼叫介面都要用到的,有時效
        // 封裝要傳送的json
        Map<String,Object> map = new HashMap();
        map.put("touser","otGbAjmSd1l3_U472fh1z6vepZ2A");//你要傳送給某個使用者的openid 前提是已關注該公眾號,該openid是對應該公眾號的,不是普通的openid
        map.put("template_id","tHeERRgJhjR2WKXV1CknaLfRtvJaTs-GU30n4kCRtbA");//模板訊息id
        map.put("url","https://www.vipkes.cn");//使用者點選模板訊息,要跳轉的地址
        // 封裝miniprogram 跳轉小程式用,不跳不要填
        Map<String,String> mapA = new HashMap<>();
        mapA.put("appid",""); //小程式appid
        mapA.put("pagepath",""); //小程式頁面pagepath
        map.put("miniprogram",mapA);

        // 以下就是根據模板訊息的格式封裝好,我模板的是:問題反饋結果通知  可以和我一樣試試
        // 封裝first
        Map firstMap = new HashMap();
        firstMap.put("value","您提交的問題有新的回覆!"); //內容
        firstMap.put("color","#173177"); //字型顏色

        // 封裝keyword1 提交的問題
        Map keyword1Map = new HashMap();
        keyword1Map.put("value","我司走廊上的花已經死了,請儘快派人過來,謝謝");
        keyword1Map.put("color","#fff");

        // 封裝keyword2
        Map keyword2Map = new HashMap();
        keyword2Map.put("value","好的,我們馬上派人過來!");
        keyword2Map.put("color","#fff");

        // 封裝remark
        Map remarkMap = new HashMap();
        remarkMap.put("value","2018-08-07 16:16:16");
        remarkMap.put("color","#fff");

        // 封裝data
        Map dataMap = new HashMap();
        dataMap.put("first",firstMap);
        dataMap.put("keyword1",keyword1Map);
        dataMap.put("keyword2",keyword2Map);
        dataMap.put("remark",remarkMap);

        map.put("data",dataMap);
        String r = HttpUtil.getJsonData(JSONObject.fromObject(map),"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken); //傳送模板訊息,這裡有個工具類,我給你喲
        System.out.println("-->"+r);
    }

    //這main方法你認識不,嘻嘻  開個玩笑
    public static void main(String[] args){
        WxSendTemp wxSendTemp = new WxSendTemp();
        wxSendTemp.sendTemp();
    }
}

2.傳送json資料工具類啦

package com.core.utils;

import net.sf.json.JSONObject;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtil {

    public static String getJsonData(JSONObject jsonParam, String urls) {
        StringBuffer sb=new StringBuffer();
        try {
            // 建立url資源
            URL url = new URL(urls);
            // 建立http連線
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 設定允許輸出
            conn.setDoOutput(true);
            // 設定允許輸入
            conn.setDoInput(true);
            // 設定不用快取
            conn.setUseCaches(false);
            // 設定傳遞方式
            conn.setRequestMethod("POST");
            // 設定維持長連線
            conn.setRequestProperty("Connection", "Keep-Alive");
            // 設定檔案字符集:
            conn.setRequestProperty("Charset", "UTF-8");
            // 轉換為位元組陣列
            byte[] data = (jsonParam.toString()).getBytes();
            // 設定檔案長度
            conn.setRequestProperty("Content-Length", String.valueOf(data.length));
            // 設定檔案型別:
            conn.setRequestProperty("contentType", "application/json");
            // 開始連線請求
            conn.connect();
            OutputStream out = new DataOutputStream(conn.getOutputStream()) ;
            // 寫入請求的字串
            out.write((jsonParam.toString()).getBytes());
            out.flush();
            out.close();

            System.out.println(conn.getResponseCode());

            // 請求返回的狀態
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()){
                System.out.println("連線成功");
                // 請求返回的資料
                InputStream in1 = conn.getInputStream();
                try {
                    String readLine=new String();
                    BufferedReader responseReader=new BufferedReader(new InputStreamReader(in1,"UTF-8"));
                    while((readLine=responseReader.readLine())!=null){
                        sb.append(readLine).append("\n");
                    }
                    responseReader.close();
                    System.out.println(sb.toString());

                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            } else {
                System.out.println("error++");

            }

        } catch (Exception e) {

        }

        return sb.toString();

    }
}


3.沒了啊,就這麼簡單,執行下main就可以了呢

注意:您需要獲取到了使用者openid(自己搜個教程就是了),有appid,appSecret(公眾號上有) 還有公眾號是認證的“服務號”,找到對應的模板訊息(列子中的模板名是:問題反饋結果通知)。