申請微信模板成功后,我們應該怎樣封裝和發送消息到微信,讓它推送到公眾號。在本文中將會介紹封裝和發送模板消息到微信,包括:“將需要發送的消息內容放到hashmap中存儲”、“封裝詳細信息模板”、“拼接json格式數據”、“向微信發送POST請求”、“檢查微信返回結果”。
1、將需要發送的消息內容放到hashmap中存儲。
Map<String, Object> param = new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT_Default_Chinese);
param.put(WxTemplateData.field.getFIELD_NAME_first(), new WxTemplateData("【提醒】你好,你有新的采購訂單需要審核", WxTemplateData.backgroundColor));
param.put(WxTemplateData.field.getFIELD_NAME_keyword1(), new WxTemplateData(staff.getName(), WxTemplateData.backgroundColor));
param.put(WxTemplateData.field.getFIELD_NAME_keyword2(), new WxTemplateData(company.getName(), WxTemplateData.backgroundColor));
param.put(WxTemplateData.field.getFIELD_NAME_keyword3(), new WxTemplateData(sdf.format(new Date()), WxTemplateData.backgroundColor));
param.put(WxTemplateData.field.getFIELD_NAME_keyword4(), new WxTemplateData("采購審核", WxTemplateData.backgroundColor));
param.put(WxTemplateData.field.getFIELD_NAME_remark(), new WxTemplateData("請及時審批!", WxTemplateData.backgroundColor));
2、封裝詳細信息模板。
JSONObject jsData = WxUtils.toJsonObject(param);
public static JSONObject toJsonObject(Map<String, Object> param) {
JSONObject jsonObject = new JSONObject();
for (Map.Entry<String, Object> entry : param.entrySet()) {
JSONObject keyJson = new JSONObject();
WxTemplateData templateData = (WxTemplateData) entry.getValue();
keyJson.put(WxTemplateData.field.getFIELD_NAME_value(), templateData.getValue());
keyJson.put(WxTemplateData.field.getFIELD_NAME_color(), templateData.getColor());
jsonObject.put(entry.getKey(), keyJson);
}
return jsonObject;
}
3、拼接json格式數據。
JSONObject json = new JSONObject();
json.put(WxTemplate.field.getFIELD_NAME_touser(), openid);// openid
json.put(WxTemplate.field.getFIELD_NAME_template_id(), templateID);// 模板id
json.put(WxTemplate.field.getFIELD_NAME_url(), BaseAction.DOMAIN + "wx/isLogin.bx?identify=purchasingOrder&ID=" + purchasingOrder.getID());// 跳轉頁面
json.put(WxTemplate.field.getFIELD_NAME_topcolor(), WxTemplateData.backgroundColor);
json.put(WxTemplate.field.getFIELD_NAME_data(), jsData.toString());// 模板數據
4、向微信發送POST請求。
String newurl = String.format(templateUrl, accessToken.getAccessToken());
JSONObject result = WxUtils.postToWxServer(newurl, json.toString());
5、檢查微信返回結果。
int errcode = (int) result.get(BaseWxModel.WX_ERRCODE);
if (errcode == BaseWxModel.WX_ERRCODE_InvalidToken && MAX_retryCount >= retryCount) {
logger.error("發送消息到WX服務器時發現Token失效,正在重新申請Token和發送...\r\n此消息為:\r\n" + msg);
bDeleteOldToken = true;
retryCount++;
continue;
} else if (MAX_retryCount < retryCount) {
logger.error("發送消息到WX服務器重試次數過大,終止重試");
}
String errmsg = (String) result.get(BaseWxModel.WX_ERRMSG);
params.put(BaseWxModel.WX_ERRCODE, errcode);
params.put(BaseWxModel.WX_ERRMSG, errmsg);