申请微信模板成功后,我们应该怎样封装和发送消息到微信,让它推送到公众号。在本文中将会介绍封装和发送模板消息到微信,包括:“将需要发送的消息内容放到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);