微信公眾號開發(Java) ---- 模板訊息介面的使用
阿新 • • 發佈:2019-01-04
我們先看下官方文件給出的模板訊息介紹:
下面直接寫我的流程了:
第一步:公眾號平臺上設定好模板訊息形式如下(我拿的是測試號演示):
第二步:提前寫好訪問模板訊息的介面如下
第三步:構造需要的實體類,主要是方便最後構建json資料,在這裡我直接貼出我的業務用到的實體類/** * 傳送模板訊息 * * @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; }
模板訊息實體類:
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";
}
最後成果展示:
主叫方收到(前提是主叫方也關注了該服務號):
被叫方收到:
完成~~~