微信模板資訊傳送給使用者(JAVA)
阿新 • • 發佈:2019-01-11
微信模板資訊
為了保證使用者不受到騷擾,在開發者出現需要主動提醒、通知使用者時,才允許開發者在公眾平臺網站中模板訊息庫中選擇模板,選擇後獲得模板ID,再根據模板ID向用戶主動推送提醒、通知訊息。
獲取微信憑證
這一步我在另一篇文章中的“獲取access_token”講到。如果還沒有認識到這個知識點的,請另檢視。
開通微信模板資訊
- 開通微信模板資訊功能(認證的服務號)
選擇特定的模板資訊(根據選擇不同的行業有不同的模板)
圖1.模板庫獲取模板資訊id傳送資訊
模板資訊開通成功之後,就可以根據自己的需求選擇適合的模板。
例:我們選擇“訂單支付成功”的模板
圖2.模板資訊詳情我們會獲得一個模板ID(templat_id)這個id挺重要的,請大家記住哦。
傳送模板資訊
必須的引數
- 使用者的open_id(使用者唯一標識)
- 模板資訊id
- 模板詳情,帶.DATA引數的填充json變數
- 模板資訊帶詳情,URL連結(請注意,URL置空,則在傳送後,點選模板訊息會進入一個空白頁面(ios),或無法點選(android)。)
字型顏色,如黑色“#FF0000”
封裝模板詳細資訊
方法:
需要的jar包:org.json
/**
* @method packJsonmsg
* @描述: TODO(封裝微信模板:訂單支付成功)
* @引數@param first 頭部
* @引數@param orderMoneySum 總金額
* @引數@param orderProductName 商品資訊
* @引數@param remark 說明
* @引數@return
* @返回型別:JSONObject
* @新增時間 2016-1-5下午03:38:54
* @作者:***
*/
public static JSONObject packJsonmsg(String first, String orderMoneySum, String orderProductName, String remark){
JSONObject json = new JSONObject();
try {
JSONObject jsonFirst = new JSONObject();
jsonFirst.put("value", first);
jsonFirst.put("color", "#173177");
json.put("first", jsonFirst);
JSONObject jsonOrderMoneySum = new JSONObject();
jsonOrderMoneySum.put("value", orderMoneySum);
jsonOrderMoneySum.put("color", "#173177");
json.put("orderMoneySum", jsonOrderMoneySum);
JSONObject jsonOrderProductName = new JSONObject();
jsonOrderProductName.put("value", orderProductName);
jsonOrderProductName.put("color", "#173177");
json.put("orderProductName", jsonOrderProductName);
JSONObject jsonRemark = new JSONObject();
jsonRemark.put("value", remark);
jsonRemark.put("color", "#173177");
json.put("Remark", jsonRemark);
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
上面方法是的到模板資訊的json物件。
接下來就是傳送資訊的方法了。
/**
* @method sendWechatmsgToUser
* @描述: TODO(傳送模板資訊給使用者)
* @引數@param touser 使用者的openid
* @引數@param templat_id 資訊模板id
* @引數@param url 使用者點選詳情時跳轉的url
* @引數@param topcolor 模板字型的顏色
* @引數@param data 模板詳情變數 Json格式
* @引數@return
* @返回型別:String
* @新增時間 2016-1-5上午10:38:45
* @作者:***
*/
public static String sendWechatmsgToUser(String touser, String templat_id, String clickurl, String topcolor, JSONObject data){
String tmpurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
String token = JsapiTicketTimeTask.access_token; //微信憑證,access_token
String url = tmpurl.replace("ACCESS_TOKEN", token);
JSONObject json = new JSONObject();
try {
json.put("touser", touser);
json.put("template_id", templat_id);
json.put("url", clickurl);
json.put("topcolor", topcolor);
json.put("data", data);
} catch (JSONException e) {
e.printStackTrace();
}
String result = httpsRequest(url, "POST", json.toString());
try {
JSONObject resultJson = new JSONObject(result);
String errmsg = (String) resultJson.get("errmsg");
if(!"ok".equals(errmsg)){ //如果為errmsg為ok,則代表傳送成功,公眾號推送資訊給使用者了。
return "error";
}
} catch (JSONException e) {
e.printStackTrace();
}
return "success";
}
httpsRequest 請求方法:
public static String httpsRequest(String requestUrl, String requestMethod, String outputStr){
try {
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 設定請求方式(GET/POST)
conn.setRequestMethod(requestMethod);
conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
// 當outputStr不為null時向輸出流寫資料
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意編碼格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 從輸入流讀取返回內容
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 釋放資源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
return buffer.toString();
} catch (ConnectException ce) {
System.out.println("連線超時:{}");
} catch (Exception e) {
System.out.println("https請求異常:{}");
}
return null;
}
總結
模板訊息是另外一種通知使用者的方法,當手機資訊不能通知使用者時,也未嘗不是一種好的方法哦。