`
danandyu8013
  • 浏览: 39107 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

微信公众平台java版本token验证

阅读更多

微信公众平台java版本token验证

以下是token.jsp  本人项目中使用的方法,仅供参考,方便自己后期使用

 

<%@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="org.springframework.context.ApplicationContext"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
<%@page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="java.util.*"%>
<%@page import="com.cjt.base.util.comm.SysOptionsValues"%>
<%@page import="com.sides.vms.web.violation.service.MessageResolveBiz"%>
<%@page import="com.sides.vms.web.violation.service.ViolationInfoBiz"%>
<%@page import="com.sides.vms.web.violation.bean.RequsetBean"%>
<%@page import="com.sides.vms.web.violation.action.ViolationAction"%>
<%@page import="com.sides.vms.web.violation.bean.Violation"%>
<%@page import="com.sides.vms.web.violation.MainConfig"%>

<%
 String path = request.getContextPath();
 
%>
<%
 //WeiXinHandler为内部类不能使用非final类型的对象
 final String TOKEN="weixin";
 final HttpServletRequest final_request=request;
 final HttpServletResponse final_response=response;
 final HttpSession final_session =session;
 final ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
 final MessageResolveBiz msgResolveBiz = (MessageResolveBiz)context.getBean("msgResolveBiz");
 final ViolationInfoBiz violationInfoBiz = (ViolationInfoBiz)context.getBean("violationInfoBiz"); 
 final String localIp = MainConfig.LOCALIP;
%>
<%
class WeiXinHandler{
 public void valid(){
  
  String echostr=final_request.getParameter("echostr");
  if(null==echostr||echostr.isEmpty()){
   try{
    responseMsg();
   }catch(Exception ex){
    ex.printStackTrace();
   }
  }else{
   if(this.checkSignature()){
    this.print(echostr);
   }else{
    this.print("error");                                                                                                                                                                                                                                                                                                                                        
   }
  }
 }
 //自动回复内容
 public void responseMsg()throws Exception{
  String postStr=null;
 
  postStr=this.readStreamParameter(final_request.getInputStream());
  System.out.println("22:"+postStr);
  //存入用户信息及消息及验证用户
  String result = msgResolveBiz.insertMseeage(msgResolveBiz.pageContent2Bean(postStr));
  if("invalidUser".equals(result)){
   //非法用户
   final_response.setHeader("REFRESH","5;URL=userManager/login.jsp");
  }
  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 msgtype =root.elementTextTrim("MsgType"); //消息类型
            String event =root.elementTextTrim("Event"); //事件推送  click 表示自定义菜单点击事件
            String eventKey =root.elementTextTrim("EventKey"); //自定义菜单接口中KEY值对应
            String location_x =root.elementTextTrim("Location_X"); //地理位置纬度
            String location_y =root.elementTextTrim("Location_Y"); //地理位置经度
            String scale = root.elementTextTrim("Scale");//地图缩放大小
            String label = root.elementTextTrim("Label");//地理位置信息
            String time = new Date().getTime()+"";
            System.out.println("keyword:  "+keyword);
            System.out.println("msgtype:  "+msgtype);
            //文本消息
            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 textTpl2 = "<xml>"+
     "<ToUserName><![CDATA["+fromUsername+"]]></ToUserName>"+
     "<FromUserName><![CDATA["+toUsername+"]]></FromUserName>"+
     "<CreateTime>"+new Date().getTime()+"</CreateTime>"+
     "<MsgType><![CDATA[news]]></MsgType>"+
     "<Content><![CDATA[]]></Content>"+
     "<ArticleCount>2</ArticleCount>"+
     "<Articles>"+
     "<item>"+
     "<Title><![CDATA[%1$s]]></Title>"+
     "<Description><![CDATA[]]></Description>"+
     "<PicUrl><![CDATA[%2$s]]></PicUrl>"+
     "<Url><![CDATA[%3$s]]></Url>"+
     "</item>"+
     "<item>"+
     "<Title><![CDATA[%4$s]]></Title>"+
     "<Description><![CDATA[]]></Description>"+
     "<PicUrl><![CDATA[]]></PicUrl>"+
     "<Url><![CDATA[%5$s]]></Url>"+
     "</item>"+
     "</Articles>"+
     "<FuncFlag>0</FuncFlag>"+
     "</xml>"; 
  }
 }
 
 //微信接口验证
 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();
%>

分享到:
评论

相关推荐

    微信公众平台Token验证

    微信公众平台Token验证源码,java版!

    JAVA微信公众平台Token验证

    首先要开启开发模式必须要进行Token的一个验证,你给出一个地址,微信发送请求,然后你给出相应,就这么简单。虽然说是简单,但是这是事后才说的,官方只有PHP的DEMO,我用JAVA开发的时候各种蛋疼不会弄,不过好在...

    微信公众平台接入Java实例

    利用java实现微信公众平台接入,实现TOKEN验证,以及信息的回复接口实现。

    微信公众号服务器验证Token步骤图解

    服务器验证Token验证分为以下及步骤 一,在微信公众号平台上设置 1.1打开微信公众号平台 1.2打开”开发“中的&lt;基本配置&gt; 1.3点击基本配置页面里的修改配置 1.4输入URL: url填写:http://外网IP:端口号/wx 。...

    微信JAVA 开发

    微信JAVA开发主要涉及微信公共平台的应用接口开发,用于与微信用户进行交互。在这个过程中,开发者需要验证自己的身份,以及正确处理微信服务器发送的数据并作出相应的响应。以下将详细阐述这个过程的关键步骤和知识...

    java实现微信企业号和公众号服务端调用方法封装源码

    1、微信企业号服务端调用方法java源码实现 1.1 获取AccessToken 1.2 发送文本消息 1.3 发送消息(包括文本、图像、声音、视频、文件、图文) 1.4 上传素材文件 1.5 获取素材文件 1.6 获取应用素材总数以及每种类型...

    Snapper:微信公众号的Java库

    wx_maven基于maven的微信公众后台源码,它是一个标准的maven项目,里面是微信公众号后台的主要源码。源码的目录结构如下:WxApiServlet是处理请求的实现类,它会将微信服务器发来的Post请求封装成 MsgRequest对象,...

    cas_wx:微信认证和CAS整合

    在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面: 上述snsapi_base模式是静默模式,不需微信...

    微信开发简易整理

    - Access Token是调用微信接口的关键,有效期为2小时,可以通过AppID和Secret在微信开发平台获取。 - 获取Access Token有两种方式:手动通过URL获取和程序化获取。程序化获取通常涉及到网络请求,解析返回的JSON...

    疫情核酸预约微信小程序.zip

    这款小程序结合了现代技术与公共卫生需求,利用微信的广泛用户基础,为大众提供了便捷的服务。它由Java后端技术和微信小程序前端共同构建,采用SpringBoot和SSM(Spring、SpringMVC、MyBatis)框架,确保系统的高效...

    微信小程序精准扶贫数据收集小程序平台源码数据库.docx

    本项目通过整合微信小程序、Java、Spring Boot等多种技术,构建了一个功能完备、易于使用的精准扶贫数据收集平台。该平台不仅能够提高扶贫工作的效率和质量,还能增强公众对扶贫工作的参与度和支持力度,具有重要的...

    铁路订票系统微信小程序.zip

    4. 安全机制:使用Spring Security进行权限控制,JWT(JSON Web Token)处理用户身份验证,防止未授权访问。 六、性能优化 1. 分页查询:优化数据库查询,避免大数据量一次性加载,提高响应速度。 2. 缓存策略:...

    基于微信小程序的图书馆座位管理系统.zip

    微信小程序是一种轻量级的应用开发平台,无需下载安装即可使用,特别适合图书馆这样的公共服务场景。开发者可以利用微信提供的开发工具和API,构建用户界面并实现与服务器的通信。小程序的设计应注重用户体验,包括...

    2024最新医院核酸检测预约挂号微信小程序.zip

    这个项目可能是为了方便公众通过微信平台进行快速、便捷的核酸检测预约和挂号服务。下面将详细阐述与这个项目相关的知识点。 1. 微信小程序开发:微信小程序是一种轻量级的应用开发框架,允许开发者在微信平台上...

    WEIXIN-POPULAR-master.zip

    weixin-popular 包括微信公众平台基础API与支付API,提供便捷的API调用接口. API 列表 TokenAPI access_token 获取 MediaAPI 多媒体上传下载(临时素材) MaterialAPI 永久素材 MenuAPI 菜单 MessageAPI 信息发送...

    使用图灵api创建微信聊天机器人

    这个过程涉及到两个关键平台:图灵机器人和微信公共平台。首先,你需要有一个图灵机器人的账号,可以通过访问图灵机器人的官方网站进行注册。注册完成后,登录账号,你会看到一个界面,其中包含了设置机器人的各种...

    基于springboot传染病防控宣传系统微信小程序源码数据库文档.zip

    7. **安全与权限管理**:考虑到数据敏感性和用户隐私,系统可能包含用户登录注册功能,并对数据访问进行权限控制,如使用JWT(JSON Web Token)进行身份验证。 8. **测试与部署**:开发过程中,单元测试和集成测试...

    【主流技术】Spring Boot中的微信支付(小程序).doc

    Spring Boot 作为一款广泛应用的Java开发框架,结合微信支付API,能轻松实现高效、安全的支付流程。本文将详细介绍在Spring Boot环境中集成微信支付(小程序)的技术细节。 一、申请流程与步骤 1. 注册微信支付商户...

    wechat.zip

    ... ... 1.MenuUtil为增删差自定义菜单的封装 2.MenuManager为自定义菜单的内容类型管理工具(设置...4.WeixinUtil包括了接收和发送消息类型初始化以及微信公众平台接口Url的初始化 5.XmlMessUtil是xml形式消息处理工具类

    基于springboot大学生就业服务平台.zip

    它的成功实施不仅体现了SpringBoot、SSM和微信小程序的综合运用,也为未来类似的公共服务平台提供了参考模板。通过这个平台,大学生能够更好地对接就业市场,而企业也能更有效地找到合适的人才,实现双赢。

Global site tag (gtag.js) - Google Analytics