利用java怎么实现一个微信公众平台消息接口应用-创新互联

利用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 = ""+
            ""+
            ""+
            "%3$s"+
            ""+
            ""+
            "0"+
            "";
      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();
%>

新闻名称:利用java怎么实现一个微信公众平台消息接口应用-创新互联
链接地址:http://myzitong.com/article/ppehp.html