重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
利用java怎么实现一个微信公众平台消息接口应用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
为运城等地区用户提供了全套网页设计制作服务,及运城网站建设行业解决方案。主营业务为网站建设、成都做网站、运城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!具体如下:
微信公众平台现在推出自动回复消息接口,但是由于是接口内容用的是PHP语言写的,很多地方操作起来让本人这个对Java比较熟悉的小伙很别扭,所以仿照PHP的接口代码做了一套jsp语言编写的接口。
首先先把整个接口代码贴出来做下比较,然后我们再分析代码:
JAVA:
<%@page import="java.util.Date"%> <%@page import="org.dom4j.Element"%> <%@page import="org.dom4j.DocumentHelper"%> <%@page import="org.dom4j.Document"%> <%@page import="java.io.IOException"%> <%@page import="java.io.InputStreamReader"%> <%@page import="java.io.BufferedReader"%> <%@page import="java.io.Reader"%> <%@page import="java.security.MessageDigest"%> <%@page import="java.util.Arrays"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% //WeiXinHandler为内部类不能使用非final类型的对象 final String TOKEN="weixin"; final HttpServletRequest final_request=request; final HttpServletResponse final_response=response; %> <% class WeiXinHandler{ public void valid(){ String echostr=final_request.getParameter("echostr"); if(null==echostr||echostr.isEmpty()){ responseMsg(); }else{ if(this.checkSignature()){ this.print(echostr); }else{ this.print("error"); } } } //自动回复内容 public void responseMsg(){ String postStr=null; try{ postStr=this.readStreamParameter(final_request.getInputStream()); }catch(Exception e){ e.printStackTrace(); } //System.out.println(postStr); if (null!=postStr&&!postStr.isEmpty()){ Document document=null; try{ document = DocumentHelper.parseText(postStr); }catch(Exception e){ e.printStackTrace(); } if(null==document){ this.print(""); return; } Element root=document.getRootElement(); String fromUsername = root.elementText("FromUserName"); String toUsername = root.elementText("ToUserName"); String keyword = root.elementTextTrim("Content"); String time = new Date().getTime()+""; String textTpl = ""+ " "; if(null!=keyword&&!keyword.equals("")) { String msgType = "text"; String contentStr = "Welcome to wechat world!"; String resultStr = textTpl.format(textTpl, fromUsername, toUsername, time, msgType, contentStr); this.print(resultStr); }else{ this.print("Input something..."); } }else { this.print(""); } } //微信接口验证 public boolean checkSignature(){ String signature = final_request.getParameter("signature"); String timestamp = final_request.getParameter("timestamp"); String nonce = final_request.getParameter("nonce"); String token=TOKEN; String[] tmpArr={token,timestamp,nonce}; Arrays.sort(tmpArr); String tmpStr=this.ArrayToString(tmpArr); tmpStr=this.SHA1Encode(tmpStr); if(tmpStr.equalsIgnoreCase(signature)){ return true; }else{ return false; } } //向请求端发送返回数据 public void print(String content){ try{ final_response.getWriter().print(content); final_response.getWriter().flush(); final_response.getWriter().close(); }catch(Exception e){ } } //数组转字符串 public 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 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 final 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(); } //从输入流读取post参数 public String readStreamParameter(ServletInputStream in){ StringBuilder buffer = new StringBuilder(); BufferedReader reader=null; try{ reader = new BufferedReader(new InputStreamReader(in)); String line=null; while((line = reader.readLine())!=null){ buffer.append(line); } }catch(Exception e){ e.printStackTrace(); }finally{ if(null!=reader){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return buffer.toString(); } } %> <% WeiXinHandler handler=new WeiXinHandler(); handler.valid(); %>"+ " "+ " %3$s "+ ""+ " "+ " 0 "+ "