Java微信二次开发(一) Java微信请求验证功能
程序员文章站
2024-02-26 15:39:34
准备用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; } }
第一天就做了这些,完成了微信请求验证的功能。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: Java远程共享目录的操作代码