zoukankan      html  css  js  c++  java
  • Java微信二次开发(一)

    准备用Java做一个微信二次开发项目,把流程写在这里吧。

    第一天,做微信请求验证

    需要导入库:servlet-api.jar

    第一步:新建包com.wtz.service,新建类LoginServlet.java

     1 package com.wtz.service;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 import com.wtz.util.ValidationUtil;
    12 
    13 /**
    14  *     @author wangtianze QQ:864620012
    15  *    @date 2017年4月17日 下午8:11:32
    16  *  <p>version:1.0</p>
    17  *     <p>description:微信请求验证类</p>
    18  */
    19 public class LoginServlet extends HttpServlet {
    20 
    21     @Override
    22     protected void doGet(HttpServletRequest request, HttpServletResponse response)
    23             throws ServletException, IOException {
    24         System.out.println("get请求。。。。。。");
    25         
    26         //1.获得微信签名的加密字符串
    27         String signature = request.getParameter("signature");
    28         
    29         //2.获得时间戳信息
    30         String timestamp = request.getParameter("timestamp");
    31          
    32         //3.获得随机数
    33         String nonce = request.getParameter("nonce");
    34         
    35         //4.获得随机字符串
    36         String echostr = request.getParameter("echostr");
    37         
    38         System.out.println("获得微信签名的加密字符串:"+signature);
    39         System.out.println("获得时间戳信息:"+timestamp);
    40         System.out.println("获得随机数:"+nonce);
    41         System.out.println("获得随机字符串:"+echostr);
    42         
    43         PrintWriter out = response.getWriter();
    44         
    45         //验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败
    46         if(ValidationUtil.checkSignature(signature, timestamp, nonce)){
    47             out.print(echostr);
    48         }
    49         
    50         out.close();
    51         out = null;
    52     }
    53 }

    第二步:新建包com.wtz.util,新建类Validation.java

     1 package com.wtz.util;
     2 
     3 import java.security.MessageDigest;
     4 import java.security.NoSuchAlgorithmException;
     5 import java.util.Arrays;
     6 
     7 /**
     8  *     @author wangtianze QQ:864620012
     9  *    @date 2017年4月17日 下午8:35:57
    10  *  <p>version:1.0</p>
    11  *     <p>description:微信请求校验工具类</p>
    12  */
    13 public class ValidationUtil {
    14     private static String token = "wangtianze";
    15     
    16     public static boolean checkSignature(String signature,String timestamp,String nonce){
    17         //1.将token,timestamp,nonce三个参数进行排序
    18         String[] str = new String[]{token,timestamp,nonce};
    19         Arrays.sort(str);
    20         
    21         //2.将三个参数字符串拼接成一个字符串
    22         StringBuilder buff = new StringBuilder();
    23         for(int i=0;i<buff.length();i++){
    24             buff.append(str[i]);
    25         }
    26         
    27         //3.进行sha1加密
    28         MessageDigest md = null;
    29         String result = "";
    30         try {
    31             md = MessageDigest.getInstance("SHA-1");
    32             byte[] data = md.digest(buff.toString().getBytes());
    33             
    34             //将字节数组转换成字符串
    35             result = bytesToString(data);
    36             
    37             System.out.println("加密后的字符串为:"+result);
    38             
    39         } catch (NoSuchAlgorithmException e) {
    40             // TODO Auto-generated catch block
    41             e.printStackTrace();
    42         }
    43         
    44         return result!=null?(result.equals(signature.toUpperCase())):false;
    45     }
    46     
    47     /**
    48      * 将字节数组转换成十六进制字符串
    49      * @param byteArray
    50      * @return
    51      */
    52     private static String bytesToString(byte[] byteArray){
    53         String stringDigest = "";
    54         for(int i=0;i<stringDigest.length();i++){
    55             stringDigest += byteToHexString(byteArray[i]);
    56         }
    57         return stringDigest;
    58     }
    59     
    60     /**
    61      * 将一个字节转换为十六进制字符串
    62      * @param mByte
    63      * @return
    64      */
    65     private static String byteToHexString(byte mByte){
    66         char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    67         char[] temp = new char[2];
    68         
    69         temp[0] = digit[(mByte>>>4) & 0X0F];
    70         temp[1] = digit[mByte & 0X0F];
    71         
    72         String str = new String(temp);
    73         return str;
    74     }
    75 }

    第一天就做了这些,完成了微信请求验证的功能

  • 相关阅读:
    【知了堂学习笔记】java 正则表达式
    【知了堂学习笔记】java 接口与抽象类
    【知了堂学习笔记】java web 简单的登录
    【知了堂学习笔记】java IO流归纳总结
    【知了堂学习笔记】java 自定义异常
    【知了堂学习笔记】java 方法重载与重写的归纳
    编译链接符号重定位流程简述
    项目用到了lua的哪些部分
    lua协程实现简析
    杂乱无章
  • 原文地址:https://www.cnblogs.com/wangtianze/p/6736495.html
Copyright © 2011-2022 走看看