1. 程式人生 > >Java實現微信統一服務訊息

Java實現微信統一服務訊息

統一服務訊息介面能成功推送小程式模板訊息,可以跳轉到小程式頁面。

統一服務訊息介面能成功推送公眾號模板訊息,但是跳轉小程式目前不行。經測試miniprogram本應該跳轉到小程式頁面,但未生效,而url跳轉網頁是可以的。有詳情的為添加了url的,無詳情的為未新增url只有miniprogram的。官方文件寫到的引數都是必填,其實urlminiprogram都不是必填項,可參考服務號的模板訊息與小程式的模板訊息。

下面是小程式模板訊息效果,通過服務通知傳送

/**
	 * 統一服務訊息
	 * 小程式模板訊息,傳送服務通知
	 * @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;
		
	}
}