微信传输过来的的参数:
官方建议的验证步骤:
使用java实现验证:
第一步:接收微信的参数:
// 微信加密签名 String signature = request.getParameter("signature"); // 随机字符串 String echostr = request.getParameter("echostr"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce");
第二步:字典排序
第三步:SHA-1加密,并对比//字符串数组 String[] arr=new String[] {signature,timestamp,nonce}; //字典排序 Arrays.sort(arr);
//字符串拼接 String bigStr=arr[0]+arr[1]+arr[2]; //加密 try { //创建整理类对象,加密SHA-1 MessageDigest md=MessageDigest.getInstance("SHA-1"); //加密 byte[] digest=md.digest(bigStr.getBytes()); //将字节数组转换为十六进制字符串 String digestStr=byteToStr(digest); //判断 if (digestStr.toLowerCase().equals(signature)) { return true; } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return false;
/** * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将字节转换为十六进制字符串 * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; }
微信公众平台开发【一】 验证消息真实性
最新推荐文章于 2022-04-28 19:37:23 发布