?
微信公众号平台api之验证、接收文本消息和自动回复文本消息
?
?
<%@ page contentType="text/html;charset=UTF-8"%> <%@ page import="java.util.*"%> <%@ page import="java.security.*"%> <%@ page import="java.io.*"%> <%@ page import="org.w3c.dom.*"%> <%@ page import="javax.xml.parsers.*"%> <% Enumeration parameterNames = request.getParameterNames(); String parameterName = null; String parameterValue = null; while (parameterNames.hasMoreElements()) { parameterName = (String) parameterNames.nextElement(); parameterValue = request.getParameter(parameterName); System.out.println("weixin_test-param:"+parameterName+"="+parameterValue); } String TOKEN = "这里填写您设置的TOKEN值"; String echostr = request.getParameter("echostr"); String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); System.out.println("weixin_test:echostr="+echostr+",signature="+signature+",timestamp="+timestamp+",nonce="+nonce); List values = new ArrayList(); values.add(TOKEN); values.add(timestamp); values.add(nonce); Collections.sort(values); StringBuffer content = new StringBuffer(); for (int i = 0; i < values.size(); i++) { content.append(values.get(i)); } MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] b = md.digest(content.toString().getBytes("UTF-8")); String stmp = ""; StringBuffer signInfo = new StringBuffer(); for (int n = 0; n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0XFF); if (stmp.length() == 1){ signInfo.append("0"); signInfo.append(stmp); }else{ signInfo.append(stmp); } } System.out.println("weixin_test:signInfo="+signInfo+",signature="+signature); if(signInfo.toString().equals(signature)){ out.clear(); out.print(echostr); System.out.println("weixin_test(001):ok"); //receive user's message from weixin platform BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream)request.getInputStream())); String line = null; StringBuffer sb = new StringBuffer(); while((line = br.readLine())!=null){ sb.append(line); } System.out.println("weixin_message:"+sb.toString()); //recieved message :text if(sb.length()>0){ Element root=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(sb.toString().getBytes("UTF-8"))).getDocumentElement(); NodeList nodes = root.getChildNodes(); int count = nodes.getLength(); String textContent = null; String FromUserName = null; String ToUserName = null; boolean isText = false; for(int i=0;i<count;i++){ String nodeName = nodes.item(i).getNodeName(); String nodeValue = nodes.item(i).getFirstChild().getNodeValue(); if("MsgType".equals(nodeName) && "text".equals(nodeValue)){ isText = true; } if("Content".equals(nodeName)){ textContent = nodeValue; } if("FromUserName".equals(nodeName)){ FromUserName = nodeValue; } if("ToUserName".equals(nodeName)){ ToUserName = nodeValue; } } System.out.println("weixin_message:textContent="+textContent); //reply text message if(isText){ StringBuffer replyInfo = new StringBuffer(); Date d = new Date(); long CreateTime = d.getTime()/1000; replyInfo.append("<xml>"); replyInfo.append("<ToUserName>"); replyInfo.append("<![CDATA[").append(FromUserName).append("]]>"); replyInfo.append("</ToUserName>"); replyInfo.append("<FromUserName>"); replyInfo.append("<![CDATA[").append(ToUserName).append("]]>"); replyInfo.append("</FromUserName>"); replyInfo.append("<CreateTime>"); replyInfo.append(CreateTime); replyInfo.append("</CreateTime>"); replyInfo.append("<MsgType>"); replyInfo.append("<![CDATA[text]]>"); replyInfo.append("</MsgType>"); replyInfo.append("<Content>"); replyInfo.append("<![CDATA[hello,你好!]]>"); replyInfo.append("</Content>"); replyInfo.append("</xml>"); out.clear(); out.print(replyInfo.toString()); } } return; }else{ System.out.println("weixin_test:err"); } %>
?