Java微信二次开发(一) Java微信请求验证功能

网友投稿 275 2023-05-21


Java微信二次开发(一) Java微信请求验证功能

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

第一篇,做微信请求验证

需要导入库:servlet-api.jar

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

package com.wtz.service;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.wtz.util.ValidationUtil;

/**

*   @author wangtianze QQ:864620012

* @date 2017年4月17日 下午8:11:32

*

version:1.0

*

description:微信请求验证类

*/

public class LoginServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println("get请求。。。。。。");

//1.获得微信签名的加密字符串

String signature = request.getParameter("signature");

/http:///2.获得时间戳信息

String timestamp = request.getParameter("timestamp");

//3.获得随机数

String nonce = request.getParameter("nonce");

//4.获得随机字符串

String echostr = request.getParameter("echostr");

System.out.println("获得微信签名的加密字符串:"+signature);

System.out.println("获得时间戳信息:"+timestamp);

System.out.println("获得随机数:"+nonce);

System.out.println("获得随机字符串:"+echostr);

PrintWriter out = response.getWriter();

//验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败

if(ValidationUtil.checkSignature(signature, timestamp, nonce)){

out.print(echostr);

}

out.close();

out = null;

}

}

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

package com.wtz.util;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.Arrays;

/**

* @author wangtianze QQ:864620012

* @date 2017年4月17日 下午8:35:57

*

version:1.0

*

description:微信请求校验工具类

*/

public class ValidationUtil {

private static String token = "wangtianze";

public static boolean checkSignature(String signature,String timestamp,String nonce){

//1.将token,timestamp,nonce三个参数进行排序

String[] str = new String[]{token,timestamp,nonce};

Arrays.sort(str);

//2.将三个参数字符串拼接成一个字符串

StringBuilder buff = new StringBuilder();

for(int i=0;i

buff.append(str[i]);

}

//3.进行sha1加密

MessageDigest md = null;

String result = "";

try {

md = MessageDigest.getInstance("SHA-1");

byte[] data = md.digest(buff.toString().getBytes());

//将字节数组转换成字符串

result = bytesToString(data);

System.out.println("加密后的字符串为:"+result);

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result!=null?(result.equals(signature.toUpperCase())):false;

}

/**

* 将字节数组转换成十六进制字符串

* @param byteArray

* @return

*/

private statihttp://c String bytesToString(byte[] byteArray){

String stringDigest = "";

for(int i=0;i

stringDigest += byteToHexString(byteArray[i]);

}

return stringDigest;

}

/**

* 将一个字节转换为十六进制字符串

* @param mByte

* @return

*/

private static String byteToHexString(byte mByte){

char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

char[] temp = new char[2];

temp[0] = digit[(mByte>>>4) & 0X0F];

temp[1] = digit[mByte & 0X0F];

String str = new String(temp);

return str;

}

}

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

buff.append(str[i]);

}

//3.进行sha1加密

MessageDigest md = null;

String result = "";

try {

md = MessageDigest.getInstance("SHA-1");

byte[] data = md.digest(buff.toString().getBytes());

//将字节数组转换成字符串

result = bytesToString(data);

System.out.println("加密后的字符串为:"+result);

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result!=null?(result.equals(signature.toUpperCase())):false;

}

/**

* 将字节数组转换成十六进制字符串

* @param byteArray

* @return

*/

private statihttp://c String bytesToString(byte[] byteArray){

String stringDigest = "";

for(int i=0;i

stringDigest += byteToHexString(byteArray[i]);

}

return stringDigest;

}

/**

* 将一个字节转换为十六进制字符串

* @param mByte

* @return

*/

private static String byteToHexString(byte mByte){

char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

char[] temp = new char[2];

temp[0] = digit[(mByte>>>4) & 0X0F];

temp[1] = digit[mByte & 0X0F];

String str = new String(temp);

return str;

}

}

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

stringDigest += byteToHexString(byteArray[i]);

}

return stringDigest;

}

/**

* 将一个字节转换为十六进制字符串

* @param mByte

* @return

*/

private static String byteToHexString(byte mByte){

char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

char[] temp = new char[2];

temp[0] = digit[(mByte>>>4) & 0X0F];

temp[1] = digit[mByte & 0X0F];

String str = new String(temp);

return str;

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Boot(四)之使用JWT和Spring Security保护REST API
下一篇:Spring Boot(五)之跨域、自定义查询及分页
相关文章

 发表评论

暂时没有评论,来抢沙发吧~