springMVC调微信接口实现关注时消息回复和自动回复功能
来源:互联网 发布:头戴式耳机 知乎 编辑:程序博客网 时间:2024/05/29 13:46
微信一直是一个比较热门的词汇,今天我主要简单的搭建一下springMVC版本的微信接口调用
废话不多说,贴代码
RequestWeiXinWXY.java
package com.beijing.wei.weixin.weixingyu;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.beijing.wei.base.BaseContractor;import com.beijing.wei.util.common.CommonUtil1;import com.beijing.wei.util.file.SysLogs;import com.beijing.wei.weixin.service.WXYweixinService;@Controller@RequestMapping(value = "/wxyweixin")public class RequestWeiXinWXY extends BaseContractor {@Autowiredprivate WXYweixinService wxyweixinService;/** * 校验信息是否是从微信服务器发过来的。 * * @param weChat * @param out */@RequestMapping(method = { RequestMethod.GET })public void valid(WeChat weChat, PrintWriter out) {String signature = weChat.getSignature(); // 微信加密签名String timestamp = weChat.getTimestamp(); // 时间戳String nonce = weChat.getNonce();// 随机数String echostr = weChat.getEchostr();// 随机字符串// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if (ValidateUtil.validate(ValidateUtil.WXY_TOKEN, weChat)) {out.print(echostr);} else {System.out.println("不是微信服务器发来的请求,请小心!");}out.flush();out.close();}/** * 微信消息的处理 * * @param request * @param out * @throws Throwable */@RequestMapping(method = { RequestMethod.POST })public void dispose(HttpServletRequest request, HttpServletResponse response)throws Throwable {/* 消息的接收、处理、响应 */// 将请求、响应的编码均设置为UTF-8(防止中文乱码)request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");// 调用核心业务类接收消息、处理消息String respMessage = ValidateUtil.automatismRestoreEntity(ValidateUtil.automatismRestoreDocument(ValidateUtil.getStringPostWeixin(request)));SysLogs.print("INFO", "***************************$$$*** "+respMessage);// 响应消息PrintWriter out = response.getWriter();out.print(respMessage);out.flush();out.close();}}
下面是处理request请求获取微信参数:
ValidateUtil.java
package com.beijing.wei.weixin.weixingyu;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StringWriter;import java.security.MessageDigest;import java.util.Arrays;import java.util.Date;import javax.servlet.http.HttpServletRequest;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import com.beijing.wei.login.model.ProjectUsers;import com.beijing.wei.util.autoReack.XiaoDouMachine;import com.beijing.wei.util.file.SysLogs;import com.fasterxml.jackson.core.JsonGenerationException;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.dataformat.xml.XmlMapper;public class ValidateUtil {public final static String WXY_TOKEN = "weixingyu";public static boolean validate(String token,WeChat weChat){String[] tmpArr={token,weChat.getTimestamp(),weChat.getNonce()}; Arrays.sort(tmpArr); String tmpStr=ArrayToString(tmpArr); tmpStr=SHA1Encode(tmpStr); if(tmpStr.equalsIgnoreCase(weChat.getSignature())){ return true; }else{ return false; } } //数组转字符串 public static String ArrayToString(String [] arr){ StringBuffer bf = new StringBuffer(); for(int i = 0; i < arr.length; i++){ bf.append(arr[i]); } return bf.toString(); } //sha1加密 public static String SHA1Encode(String sourceString) { String resultString = null; try { resultString = new String(sourceString); MessageDigest md = MessageDigest.getInstance("SHA-1"); resultString = byte2hexString(md.digest(resultString.getBytes())); } catch (Exception ex) { } return resultString; } public static String byte2hexString(byte[] bytes) { StringBuffer buf = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { if (((int) bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString((int) bytes[i] & 0xff, 16)); } return buf.toString().toUpperCase(); } /** * <p>传值</p> * @param request 当前post值 * return String */ public static String getStringPostWeixin(HttpServletRequest request){ StringBuilder buffer = new StringBuilder(); BufferedReader reader=null; try{ reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8")); String line=null; while((line = reader.readLine())!=null){ buffer.append(line); } }catch(Exception e){ e.printStackTrace(); SysLogs.print("INFO", "request -> InputStream 异常"); SysLogs.print("WARN", e); }finally{ if(null!=reader){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); SysLogs.print("INFO", "IO 异常"); SysLogs.print("WARN", e); } } } return buffer.toString(); } /** * <p>传入数据转为document</p> * @param domStr 数据字符串 * reuturn document */ public static Document automatismRestoreDocument(String domStr){ Document document=null; if(null != domStr && !domStr.isEmpty()){ try{ SysLogs.print("INFO","微信---传入数据str"+domStr); document = DocumentHelper.parseText(domStr); }catch(Exception e){ e.printStackTrace(); SysLogs.print("WARN", e); } if(null==document){ SysLogs.print("INFO","微信---传入数据有误"); return null; } } return document; } /** * <p>自动回复</p> * @throws Throwable */ public static String automatismRestoreEntity(Document document) throws Throwable{ String resultStr = ""; Element root=document.getRootElement(); String fromUsername = root.elementText("FromUserName"); String toUsername = root.elementText("ToUserName"); String keyword = root.elementTextTrim("Content"); String MsgType = root.elementTextTrim("MsgType"); String Event = root.elementTextTrim("Event"); String time = new Date().getTime()+""; String textTpl = "<xml>"+ "<ToUserName><![CDATA[%1$s]]></ToUserName>"+ "<FromUserName><![CDATA[%2$s]]></FromUserName>"+ "<CreateTime>%3$s</CreateTime>"+ "<MsgType><![CDATA[%4$s]]></MsgType>"+ "<Content><![CDATA[%5$s]]></Content>"+ "<FuncFlag>0</FuncFlag>"+ "</xml>"; String msgType = "text"; String contentStr = ""; switch(returnTypeNumber(MsgType)){ case 1 : if(null!=keyword&&!keyword.equals("")) { contentStr = XiaoDouMachine.getXiaoDouMsg(keyword);//"你说 "+keyword +"?"; } break; case 2 : if(null != Event && Event.equals("subscribe")){ contentStr = "欢迎关注我、在这里我是你的朋友,你想说什么都可以,不过不可以生气奥"; } break; } resultStr = textTpl.format(textTpl, fromUsername, toUsername, time, msgType, contentStr); return resultStr; } /** * <p>1、text 2、event</p> * @param type * @return */ public static int returnTypeNumber(String type){ int i = 0; if(null != type && !type.isEmpty()){ if(type.equals("text")){ i = 1; }else if(type.equals("event")){ i = 2; } } return i; } }
下面是实体:WeChat
package com.beijing.wei.weixin.weixingyu;public class WeChat {private String signature;private String timestamp;private String nonce;private String echostr;public String getSignature() {return signature;}public void setSignature(String signature) {this.signature = signature;}public String getTimestamp() {return timestamp;}public void setTimestamp(String timestamp) {this.timestamp = timestamp;}public String getNonce() {return nonce;}public void setNonce(String nonce) {this.nonce = nonce;}public String getEchostr() {return echostr;}public void setEchostr(String echostr) {this.echostr = echostr;}}
以下是我做的一个小产品欢迎大家关注:
0 0
- springMVC调微信接口实现关注时消息回复和自动回复功能
- asp.net实现关注自动回复
- 微信公共平台 首次关注 自动回复消息
- 微信公众号首次关注自动回复图文消息
- 微信关注回复消息
- weiphp-自动回复消息
- VC实现自动论坛回复功能
- 微信关键字自动回复功能实现
- 微信自动回复功能实现
- 微信开发实战(5)—粉丝关注开发者公众号时,自动回复消息
- 微信开发实战(5)—粉丝关注开发者公众号时,自动回复消息
- 微信开发实战(5)—粉丝关注开发者公众号时,自动回复消息
- C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)
- 开始一:C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)
- 实现评论,回复功能
- 简单实现回复功能
- 实现朋友圈回复功能
- 实现自动回复
- Android 缓存目录
- 用系统方法提取字符串首字母并进行排序
- C# 使用第三方类库DotNetZip解压/压缩Zip文件
- c++ 读写BMP
- UIImagePickerController控件竖屏拍照保存后图片向右旋转了90度
- springMVC调微信接口实现关注时消息回复和自动回复功能
- 搭建Hadoop full distributed cluster步骤
- redis数据结构运用场景
- 如何安装apk
- Linux 技巧:让进程在后台可靠运行的几种方法
- IndentationError: unexpected indent python
- 百度重度依赖者谈谈恶意点击
- Ubuntu Navicat for MySQL安装以及破解方案
- win7_oracle11g_64位连接32位PLSQL_Developer