1. 程式人生 > >微信公眾號開發(Java) ---- 模板訊息介面的使用

微信公眾號開發(Java) ---- 模板訊息介面的使用

我們先看下官方文件給出的模板訊息介紹:



下面直接寫我的流程了:

第一步:公眾號平臺上設定好模板訊息形式如下(我拿的是測試號演示):


第二步:提前寫好訪問模板訊息的介面如下

	/**
	 * 傳送模板訊息
	 * 
	 * @param accessToken 介面訪問憑證
	 * @param jsonMsg json格式的模板訊息
	 * @return true | false
	 */
	public static boolean sendModelMessage(String accessToken, String jsonMsg) {
		log.info("訊息內容:{}", jsonMsg);
		boolean result = false;
		// 拼接請求地址
		String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
		requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
		// 傳送客服訊息
		JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "POST", jsonMsg);

		if (null != jsonObject) {
			int errorCode = jsonObject.getInt("errcode");
			String errorMsg = jsonObject.getString("errmsg");
			if (0 == errorCode) {
				result = true;
				log.info("模板訊息傳送成功 errcode:{} errmsg:{}", errorCode, errorMsg);
			} else {
				log.error("模板訊息傳送失敗 errcode:{} errmsg:{}", errorCode, errorMsg);
			}
		}

		return result;
	}
第三步:構造需要的實體類,主要是方便最後構建json資料,在這裡我直接貼出我的業務用到的實體類

模板訊息實體類:


public class MoveCarAlarmTemplate {
	private String touser; //使用者的openId
	private String template_id; //模板訊息id
	private String url;
	private String topcolor; //標題顏色
	private ModelMessage_Data data; //訊息具體內容
	
	public String getTouser() {
		return touser;
	}
	public void setTouser(String touser) {
		this.touser = touser;
	}
	public String getTemplate_id() {
		return template_id;
	}
	public void setTemplate_id(String template_id) {
		this.template_id = template_id;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}

	public String getTopcolor() {
		return topcolor;
	}
	public void setTopcolor(String topcolor) {
		this.topcolor = topcolor;
	}
	public ModelMessage_Data getData() {
		return data;
	}
	public void setData(ModelMessage_Data data) {
		this.data = data;
	}
}


 ModelMessage_Data類
public class ModelMessage_Data {
private Data_Title title;
private Data_MoveDate moveDate;
private Data_ToUserOpenNumber toUserOpenNumber;
private Data_FromUserOpenNumber fromUserOpenNumber;
private Data_Remark remark;
public Data_Remark getRemark() {
return remark;
}
public void setRemark(Data_Remark remark) {
this.remark = remark;
}
public Data_Title getTitle() {
return title;
}
public void setTitle(Data_Title title) {
this.title = title;
}

public Data_MoveDate getMoveDate() {
return moveDate;
}
public void setMoveDate(Data_MoveDate moveDate) {
this.moveDate = moveDate;
}
public Data_ToUserOpenNumber getToUserOpenNumber() {
return toUserOpenNumber;
}
public void setToUserOpenNumber(Data_ToUserOpenNumber toUserOpenNumber) {
this.toUserOpenNumber = toUserOpenNumber;
}
public Data_FromUserOpenNumber getFromUserOpenNumber() {
return fromUserOpenNumber;
}
public void setFromUserOpenNumber(Data_FromUserOpenNumber fromUserOpenNumber) {
this.fromUserOpenNumber = fromUserOpenNumber;
}

}

Data_Title title,

Data_MoveDate
Data_ToUserOpenNumber 
Data_FromUserOpenNumber 
Data_Remark 
以上幾個實體類就不貼了,每個類裡面都只有兩個String變數,分別為 value 和 color

第四步:業務處理

/**
	 * 該方法用於在呼叫對方成功後,服務號會分別向雙方傳送挪車提醒訊息
	 * @param request
	 * @param model
	 * @return
	 * @throws IOException 
	 */
	
	@RequestMapping("/send")
	public String sendMoveMessage(HttpServletRequest request,Model model) throws IOException{
		
		Properties prop = new Properties();
		FileInputStream fis = (FileInputStream) request.getSession().getServletContext().getResourceAsStream("/WEB-INF/classes/appconfig.properties");
		prop.load(fis);
		// 第三方使用者唯一憑證
		String appId = prop.getProperty("appId");
		// 第三方使用者唯一憑證金鑰
		String appSecret = prop.getProperty("appSecret");
		// 獲取介面訪問憑證
		String accessToken = CommonUtil.getToken(appId, appSecret).getAccessToken();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		
		//被呼叫方的專用號碼及openid
		String toOpenNum = request.getParameter("toUserOpenNumber");
		String toOpenId = request.getParameter("toUserOpenId");
		
		//呼叫方的專用號碼及openid
		String fromOpenNum = request.getParameter("fromUserOpenNumber");
		if(!StringUtils.isNotBlank(fromOpenNum)){
			fromOpenNum =  String.valueOf((int)((Math.random()*9+1)*100000));
		}
		String fromOpenId = request.getParameter("fromUserOpenId");
		
		//被呼叫方微信上收到挪車提醒
		MoveCarAlarmTemplate temp = new MoveCarAlarmTemplate();
		ModelMessage_Data data = new ModelMessage_Data();
		Data_Title title = new Data_Title();
		Data_MoveDate moveDate = new Data_MoveDate();
		Data_FromUserOpenNumber fromUserOpenNumber = new Data_FromUserOpenNumber();
		Data_ToUserOpenNumber toUserOpenNumber = new Data_ToUserOpenNumber();
		Data_Remark remark = new Data_Remark();
		
		remark.setValue("xxxxxx");
		remark.setColor("#2e307b");
		
		title.setValue("尊敬的車主,您好");
		title.setColor("#2e307b");
		
		moveDate.setValue(sdf.format(new Date()));
		moveDate.setColor("#2e307b");
		
		fromUserOpenNumber.setValue("您的挪車請已經發送給車主"+toOpenNum);
		fromUserOpenNumber.setColor("#2e307b");
		
		toUserOpenNumber.setValue("使用者"+fromOpenNum+"請您挪車");
		toUserOpenNumber.setColor("#2e307b");
		
		data.setFromUserOpenNumber(fromUserOpenNumber);
		data.setMoveDate(moveDate);
		data.setTitle(title);
		data.setToUserOpenNumber(toUserOpenNumber);
		data.setRemark(remark);
		
		temp.setTouser(toOpenId);
		temp.setData(data);
		temp.setTopcolor("#2e307b");
		temp.setUrl("");
		temp.setTemplate_id(挪車提醒的模板ID);
		
		
		
		String jsonMsg = JSONObject.fromObject(temp).toString();
		AdvancedUtil.sendModelMessage(accessToken, jsonMsg);
		
		
		//如果呼叫方也關注了該服務號,則呼叫方也將收到已傳送挪車提醒的訊息
		if(StringUtils.isNotBlank(fromOpenId)){
			temp.setTouser(fromOpenId);
			temp.setTemplate_id(請求回執的模板ID);
			String jsonMsg2 = JSONObject.fromObject(temp).toString();
			AdvancedUtil.sendModelMessage(accessToken, jsonMsg2);
		}
		
		
		return "warnSuccess";
	}


最後成果展示:

主叫方收到(前提是主叫方也關注了該服務號):

被叫方收到:


完成~~~