package org.liufeng.course.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JSONString; import org.liufeng.course.pojo.Token; import org.liufeng.course.util.AdvancedUtil; import org.liufeng.course.util.CommonUtil; import org.liufeng.course.util.UserConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 發送模板消息 * @author Administrator */ public class TemplateServlet extends HttpServlet { private static final long serialVersionUID = 3493133031468141822L; private static Logger log = LoggerFactory.getLogger(TemplateServlet.class); //接收后端推送消息 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); //獲取請求參數 String openId = (String)request.getParameter("openId"); String data = (String)request.getParameter("data"); String type = (String)request.getParameter("type"); //獲取服務器地址 String url = request.getRequestURL().toString(); url = url.substring(0, url.lastIndexOf("/")+1); //獲取新的token Token token = CommonUtil.getToken(UserConfig.APPID, UserConfig.SECRET); if(token!=null){ session.setAttribute("access_token", token.getAccessToken()); send(openId,token.getAccessToken(),url,data,type); }else{ log.info("獲取access_token異常"); } } /** * 發送模板消息接口 * @param openId 用戶的openid * @param access_token 調用接口憑證 * @param url 服務器地址 * @param data 模板數據 * @param type 模板類型(1隱患 2任務 3審批 4質量排查) */ public void send(String openId, String access_token, String url, String data, String type){ //拼模板請求參數 String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token; String param = "{\"touser\":\"TOUSER\",\"template_id\":\"TEMPLATE_ID\"," + "\"url\":\"URL\",\"data\":DATA}"; param = param.replace("TOUSER", openId);//接收者openid param = param.replace("URL", url+"showTemplateServlet?title="+JSONObject.fromObject(data).getString("first"));//模板跳轉鏈接 switch (type) { case "1"://隱患提醒 param = param.replace("TEMPLATE_ID", UserConfig.YINHUAN_TEMPLATE_ID);//模板ID break; case "2"://任務指派 param = param.replace("TEMPLATE_ID", UserConfig.RENWU_TEMPLATE_ID);//模板ID break; case "3"://流程待審批 param = param.replace("TEMPLATE_ID", UserConfig.SHENPI_TEMPLATE_ID);//模板ID break; case "4"://質量排查 param = param.replace("TEMPLATE_ID", UserConfig.PAICHA_TEMPLATE_ID);//模板ID break; default: log.info("推送消息的類型不存在"); break; } param = param.replace("DATA", data); // param = param.replace("DATA", "{\"first\":{\"value\":\"隱患提醒\"},\"keyword1\":{\"value\":\"C 機電\"},\"keyword2\":{\"value\":\"3-5#層運大巷內無交通管控信號。\"},\"keyword3\":{\"value\":\"已聯系廠家制作,預計10月底完工。\"},\"keyword4\":{\"value\":\"2017-07-03\"},\"keyword5\":{\"value\":\"孫榮廷(機二隊)\"},\"remark\":{\"value\":\"該隱患暫未銷號\"}}");//模板數據 System.out.println(requestUrl); System.out.println(param); //發送模板消息 // JSONObject jsonObject = CommonUtil.sendPost(requestUrl, param); JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "POST", param); int errorCode = jsonObject.getInt("errcode"); String errorMsg = jsonObject.getString("errmsg"); String msgid = jsonObject.getString("msgid"); log.info("已調用模板消息接口 errcode:"+errorCode+", errmsg:"+errorMsg+", msgid:"+msgid); } }