java傳送微信模板訊息
阿新 • • 發佈:2019-02-19
咳咳,首先您看到這篇文章,恭喜你了
其它的文章都是幾個類的,並且工具類都要麼沒有提供,要麼就是殘缺不全的缺少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(公眾號上有) 還有公眾號是認證的“服務號”,找到對應的模板訊息(列子中的模板名是:問題反饋結果通知)。