Java實現微信統一服務訊息
阿新 • • 發佈:2019-02-18
統一服務訊息介面能成功推送小程式模板訊息,可以跳轉到小程式頁面。
統一服務訊息介面能成功推送公眾號模板訊息,但是跳轉小程式目前不行。經測試miniprogram本應該跳轉到小程式頁面,但未生效,而url跳轉網頁是可以的。有詳情的為添加了url的,無詳情的為未新增url只有miniprogram的。官方文件寫到的引數都是必填,其實url和miniprogram都不是必填項,可參考服務號的模板訊息與小程式的模板訊息。
下面是小程式模板訊息效果,通過服務通知傳送
/** * 統一服務訊息 * 小程式模板訊息,傳送服務通知 * @param token 小程式ACCESS_TOKEN * @param touser 使用者openid,可以是小程式的openid,也可以是公眾號的openid * @param template_id 小程式模板訊息模板id * @param page 小程式頁面路徑 * @param formid 小程式模板訊息formid * @param data 小程式模板訊息formid * @param emphasis_keyword 小程式模板放大關鍵詞 * @return * @author HGL */ public static JSONObject sendWeappMessage(String token,String touser,String template_id, String page,String formid,JSONObject data){ JSONObject obj = new JSONObject(); JSONObject weapp_template_msg = new JSONObject(); JSONObject result = new JSONObject(); try { String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="+token; obj.put("touser", touser); weapp_template_msg.put("template_id", template_id); weapp_template_msg.put("page", page); weapp_template_msg.put("form_id", formid); weapp_template_msg.put("data", data); weapp_template_msg.put("emphasis_keyword", data.getJSONObject("keyword1").getString("value")); obj.put("weapp_template_msg", weapp_template_msg); result = HttpClientUtil.Post(url, obj); } catch (Exception e) { e.printStackTrace(); } return result; } /** * 統一服務訊息 * 公眾號模板訊息,傳送公眾號通知 * @param token 小程式ACCESS_TOKEN * @param touser 使用者openid,可以是小程式的openid,也可以是公眾號的openid * @param appid 公眾號appid * @param template_id 公眾號模板訊息模板id * @param url 公眾號模板訊息所要跳轉的url * @param weappid 公眾號模板訊息所要跳轉的小程式appid,小程式的必須與公眾號具有繫結關係 * @param pagepath 公眾號模板訊息所要跳轉的小程式頁面 * @param data 公眾號模板訊息的資料 * @return * @author HGL */ public static JSONObject sendMpMessage(String token,String touser,String appid, String template_id,String url,String weappid,String pagepath,JSONObject data){ JSONObject result = new JSONObject(); JSONObject obj = new JSONObject(); JSONObject mp_template_msg = new JSONObject(); JSONObject miniprogram = new JSONObject(); try { String path = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="+token; obj.put("touser", touser); mp_template_msg.put("appid",appid); mp_template_msg.put("template_id", template_id); mp_template_msg.put("url",url); miniprogram.put("appid", weappid); miniprogram.put("pagepath", pagepath); mp_template_msg.put("miniprogram", miniprogram); mp_template_msg.put("data", data); obj.put("mp_template_msg", mp_template_msg); result = HttpClientUtil.Post(path, obj); } catch (Exception e) { e.printStackTrace(); } return result; }
HttpClientUtil
package com.fh.util; import java.io.IOException; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpClientUtil { /** * * @param url * @param jsonObj * @return * @throws ClientProtocolException * @throws IOException */ public static JSONObject Post(String url,JSONObject jsonObj) throws ClientProtocolException, IOException{ HttpPost httpPost = new HttpPost(url); StringEntity entity = new StringEntity(jsonObj.toString(), "utf-8"); entity.setContentEncoding("UTF-8"); entity.setContentType("application/json"); httpPost.setEntity(entity); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpResponse response=httpClient.execute(httpPost); String result = EntityUtils.toString(response.getEntity(), "UTF-8"); //輸出呼叫結果 if(response != null && response.getStatusLine().getStatusCode() == 200) { // 生成 JSON 物件 JSONObject obj = JSONObject.fromObject(result); return obj; } return null; } }