文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-05-31 11:39

关注

利用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 = "<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>";      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();%>

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯