Java微信二次开发(一)
准备用Java做一个微信二次开发项目,把流程写在这里吧。
第一天,做微信请求验证
需要导入库:servlet-api.jar
第一步:新建包com.wtz.service,新建类LoginServlet.java
1 package com.wtz.service; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import com.wtz.util.ValidationUtil; 12 13 /** 14 * @author wangtianze QQ:864620012 15 * @date 2017年4月17日 下午8:11:32 16 * <p>version:1.0</p> 17 * <p>description:微信请求验证类</p> 18 */ 19 public class LoginServlet extends HttpServlet { 20 21 @Override 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) 23 throws ServletException, IOException { 24 System.out.println("get请求。。。。。。"); 25 26 //1.获得微信签名的加密字符串 27 String signature = request.getParameter("signature"); 28 29 //2.获得时间戳信息 30 String timestamp = request.getParameter("timestamp"); 31 32 //3.获得随机数 33 String nonce = request.getParameter("nonce"); 34 35 //4.获得随机字符串 36 String echostr = request.getParameter("echostr"); 37 38 System.out.println("获得微信签名的加密字符串:"+signature); 39 System.out.println("获得时间戳信息:"+timestamp); 40 System.out.println("获得随机数:"+nonce); 41 System.out.println("获得随机字符串:"+echostr); 42 43 PrintWriter out = response.getWriter(); 44 45 //验证请求确认成功原样返回echostr参数内容,则接入生效,成为开发者成功,否则失败 46 if(ValidationUtil.checkSignature(signature, timestamp, nonce)){ 47 out.print(echostr); 48 } 49 50 out.close(); 51 out = null; 52 } 53 }
第二步:新建包com.wtz.util,新建类Validation.java
1 package com.wtz.util; 2 3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 import java.util.Arrays; 6 7 /** 8 * @author wangtianze QQ:864620012 9 * @date 2017年4月17日 下午8:35:57 10 * <p>version:1.0</p> 11 * <p>description:微信请求校验工具类</p> 12 */ 13 public class ValidationUtil { 14 private static String token = "wangtianze"; 15 16 public static boolean checkSignature(String signature,String timestamp,String nonce){ 17 //1.将token,timestamp,nonce三个参数进行排序 18 String[] str = new String[]{token,timestamp,nonce}; 19 Arrays.sort(str); 20 21 //2.将三个参数字符串拼接成一个字符串 22 StringBuilder buff = new StringBuilder(); 23 for(int i=0;i<buff.length();i++){ 24 buff.append(str[i]); 25 } 26 27 //3.进行sha1加密 28 MessageDigest md = null; 29 String result = ""; 30 try { 31 md = MessageDigest.getInstance("SHA-1"); 32 byte[] data = md.digest(buff.toString().getBytes()); 33 34 //将字节数组转换成字符串 35 result = bytesToString(data); 36 37 System.out.println("加密后的字符串为:"+result); 38 39 } catch (NoSuchAlgorithmException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 44 return result!=null?(result.equals(signature.toUpperCase())):false; 45 } 46 47 /** 48 * 将字节数组转换成十六进制字符串 49 * @param byteArray 50 * @return 51 */ 52 private static String bytesToString(byte[] byteArray){ 53 String stringDigest = ""; 54 for(int i=0;i<stringDigest.length();i++){ 55 stringDigest += byteToHexString(byteArray[i]); 56 } 57 return stringDigest; 58 } 59 60 /** 61 * 将一个字节转换为十六进制字符串 62 * @param mByte 63 * @return 64 */ 65 private static String byteToHexString(byte mByte){ 66 char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 67 char[] temp = new char[2]; 68 69 temp[0] = digit[(mByte>>>4) & 0X0F]; 70 temp[1] = digit[mByte & 0X0F]; 71 72 String str = new String(temp); 73 return str; 74 } 75 }
第一天就做了这些,完成了微信请求验证的功能
posted on 2017-04-19 23:27 wangtianze 阅读(3551) 评论(0) 编辑 收藏 举报