准备用Java做一个微信二次开发项目,把流程写在这里吧。
第一篇,做微信请求验证
需要导入库:servlet-api.jar
第一步:新建包com.wtz.service,新建类LoginServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
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;
}
}
|
第一天就做了这些,完成了微信请求验证的功能。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。