準備用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; } } |
第一天就做了這些,完成了微信請求驗證的功能。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。