code: public static boolean checkSignature(String token, String signature,
                                           String timestamp, String nonce) {
          if (hasBlank(token, signature, timestamp, nonce)) {
              return false;
          }
          String[] arr = new String[]{token, timestamp, nonce};
          Arrays.sort(arr);
          StringBuilder content = new StringBuilder();
          for (String anArr : arr) {
              content.append(anArr);
          }
          MessageDigest md;
          String tmpStr = null;
  
          try {
              md = MessageDigest.getInstance("SHA-1");
              byte[] digest = md.digest(content.toString().getBytes("UTF-8"));
              tmpStr = byteToStr(digest);
          } catch (NoSuchAlgorithmException e) {
              LOG.error("加密方式异常", e);
          } catch (UnsupportedEncodingException e) {
              LOG.error("编码格式不支持", e);
          }
          return tmpStr != null && tmpStr.equalsIgnoreCase(signature);
      }
docs: 认证微信，可以参见微信开发者文档
  
  @param token     我们自己设定的token值
  @param signature 微信传来的变量
  @param timestamp 微信传来的变量
  @param nonce     微信传来的变量
  @return 是否合法