欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-28 16:48:28
准备用java做一个微信二次开发项目,把流程写在这里吧。 第一篇,做微信请求验证 需要导入库:servlet-api.jar 第一步:新建包com.wtz.servi...

准备用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
 * <p>version:1.0</p>
 *  <p>description:微信请求验证类</p>
 */
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");
  
  //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
 * <p>version:1.0</p>
 *  <p>description:微信请求校验工具类</p>
 */
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.length();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 static string bytestostring(byte[] bytearray){
  string stringdigest = "";
  for(int i=0;i<stringdigest.length();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;
 }
}

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。