6. (在前面步骤的基础上展开)模板推送消息

Posted kdes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6. (在前面步骤的基础上展开)模板推送消息相关的知识,希望对你有一定的参考价值。

一.模板推送的案列效果图

技术图片

 

 

二.java代码实现

2.1  创建消息推送对象

package com.grand.weichat.entity;

import lombok.Data;

/**
 * 消息推送实体对象
 * @author Administrator
 *
 */
@Data
public class PushMessage {
	
	private String openid;   //用户唯一编号
	private String passport; //账号
	private String id;       //告警ID号
	private String warnType; //picWarn图片违规,valueWarn浓度告警,areaWarn区域告警     
	private String title;    //标题
	private String content;  //告警内容
	private String time;     //告警时间
	private String remark;   // 备注

}

  2.2 接口代码

 

/**
	 * 推送消息
	 * @param openId   用户唯一编号 : 前面有说到获取方法,获取后存入数据库,后续从库中取用
	 * @param passport 账号 :openid与平台的关联账号,
	 * @param id       告警ID号
	 * @param warnType picWarn图片违规,valueWarn浓度告警,areaWarn区域告警     
	 * @param title    标题
	 * @param content  告警内容
	 * @param time     告警时间
	 * @param remark   备注
	 * 此接口调用地址:http://sthj.xxx.com.cn/weixin/wx/pushMessage
	 */
	@RequestMapping("pushMessage")
	@ResponseBody
    private void pushMessage(
    		HttpServletRequest request,
    		HttpServletResponse response,
    		PushMessage pushMessage
    		) {
		String strresult=null;
		if(pushMessage.getOpenid()==null) {
			strresult="openId不能为空";
		}
		if(pushMessage.getPassport()==null) {
			strresult="账号不能为空";
		}
		if(pushMessage.getId()==null) {
			strresult="告警ID号不能为空";
		}
		if(pushMessage.getWarnType()==null) {
			strresult="违规类别不能为空";
		}
		if(pushMessage.getTitle()==null) {
			strresult="标题不能为空";
		}
		if(pushMessage.getContent()==null) {
			strresult="告警内容不能为空";
		}
		if(pushMessage.getTime()==null) {
			strresult="告警时间不能为空";
		}
		if(pushMessage.getRemark()==null) {
			strresult="备注不能为空";
		}
		JSONObject jsonrst = new JSONObject();
		jsonrst.put("code", 0);
		jsonrst.put("msg", "success");
		if(strresult!=null) {
			jsonrst.put("data", strresult);
			try {
				response.getWriter().print(jsonrst.toString());
				return;
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		try {
			//更具传入的参数组装详情地址
			String  detailsUrl="http://weixin.grand-tech.com.cn:22806/static/wxmsg/alarm.html?id=valueid&warnType=valuetype&token=1_grand";
			detailsUrl=detailsUrl.replace("valueid", pushMessage.getId()).replace("valuetype", pushMessage.getWarnType());
			//获取token
			String token=WXUtilsCenter.getAccessToken(appId,appSecret);
			// 模板接口
			String urlindex = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token;
			String data="{"touser":"openid","template_id":"tmid","url":"urlpath","data":{"first":{"value":"title","color":"#000000"},"content":{"value":"keyword1","color":"#173177"},"occurtime":{"value":"keyword2","color":"#173177"},"remark":{"value":"keyword3","color":"#173177"}}}";
			data=data.replace("openid",  pushMessage.getOpenid())//openId
			.replace("tmid",templateId)          //模板Id
			.replace("urlpath",detailsUrl)       
			.replace("title", pushMessage.getTitle())        
			.replace("keyword1", pushMessage.getContent())  
			.replace("keyword2", pushMessage.getTime())       
			.replace("keyword3", pushMessage.getRemark());   

			String result = HttpUtil.post(urlindex, data);
			JSONObject json=JSONObject.fromObject(result);
			strresult="信息推送成功";
			// 显示推送结果
			log.info(strresult);
		}catch (Exception e) {
			e.printStackTrace();
			strresult="信息推送失败,出现异常!";
			
		}
		jsonrst.put("data", strresult);
		
		int logRecord = userService.insertWxUserLog(pushMessage.getOpenid(), pushMessage.getPassport(), pushMessage.toString());
		log.info("消息推送的日志存储结果"+logRecord);
		try {
			response.getWriter().print(jsonrst.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

  

2.3 接口调用测试

这里借助于hutool工具,pom引入如下:

                <dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>4.1.0</version>
		</dependency>    

在其他项目中引入如上的pom后编写测试类,具体如下:

	/**
	 *   调用平台接口 推送消息
	 */
	@Test
	public  void TestPushMessage() {
		Map<String,Object> map=new HashMap<>();
		map.put("openid", "oi1pawLJSyLOyBBtpaZafyabLbn0");
		map.put("id","5300159");
		map.put("warnType","picWarn");
		map.put("title", "AI全息监控告警通知");
		map.put("passport", "cqshbj");
		map.put("content", "pm25浓度超标10%,剩余控制量为10mg。");
		map.put("time", "2020年9月22日");
		map.put("remark", "图片告警");

		String url="http://sthj.xxx.com.cn/weichat/wx/pushMessage";
		//链式构建请求
		String result = HttpUtil.post(url, map);
		System.out.println("======>"+result);
	}

  

这样一个规范的模板推送接口就完成了,当然,这里的实现都是根据官方文档编写实现而来的。

以上是关于6. (在前面步骤的基础上展开)模板推送消息的主要内容,如果未能解决你的问题,请参考以下文章

公众号推送模板消息,跳转小程序报错INVALID WEAPP PAGEPATH

公众号推送模板消息,跳转小程序报错INVALID WEAPP PAGEPATH

公众号推送模板消息,跳转小程序报错INVALID WEAPP PAGEPATH

IOS版微信上看到的模板消息是一片空白

无法在 Android 上使用 Xamarin Azure 消息组件注册推送通知模板

微信开发-- 发送模板消息