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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.SecureRandom; import java.security.Signature; import java.security.SignatureException; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; import java.util.Random;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public interface WeChatConstant { public static final Logger logger = LoggerFactory.getLogger(WeChatConstant.class);
public static final String WECHAT_MIN_HTTP = "https://api.weixin.qq.com/sns/jscode2session?appid="; public static final String WECHAT_MIN_CODE = "&js_code="; public static final String WECHAT_MIN_SESSION_KEY = "session_key";
public static final String WECHAT_MIN_AND_WECHAT_WEB_SECRET = "&secret="; public static final String WECHAT_MIN_AND_WECHAT_WEB_GRANT_TYPE = "&grant_type=authorization_code"; public static final String WECHAT_MIN_AND_WECHAT_WEB_OPENID = "openid";
public static final String WECHAT_WEB_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxecfc9ffc1"; public static final String WECHAT_WEB_CODE = "&code="; public static final String WECHAT_WEB_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token="; public static final String WECHAT_WEB_OPENID_KEY = "&openid="; public static final String WECHAT_WEB_LANG = "&lang=zh_CN"; public static final String WECHAT_WEB_SECRET = "1f2ebf415c39"; public static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final Random RANDOM = new SecureRandom();
public static String generateNonceStr() { char[] nonceChars = new char[32]; for (int index = 0; index < nonceChars.length; ++index) { nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length())); } return new String(nonceChars); }
public static String getCurrentTimestamp() { return String.valueOf(System.currentTimeMillis() / 1000); }
public static String generateSignature(String signStr, String privateKeyBody) { Signature sign; try { sign = Signature.getInstance("SHA256withRSA"); sign.initSign(getPrivateKey(privateKeyBody)); sign.update(signStr.getBytes()); return Base64.getEncoder().encodeToString(sign.sign()); } catch (InvalidKeyException e) { throw new RuntimeException("无效的秘钥格式", e); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("当前java环境不支持RSA", e); } catch (SignatureException e) { throw new RuntimeException("签名异常!!", e); } }
public static PrivateKey getPrivateKey(String privateKeyBody) { logger.info("私钥体:{}", privateKeyBody); try { KeyFactory kf = KeyFactory.getInstance("RSA"); return kf.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyBody))); } catch (NoSuchAlgorithmException e) { logger.error("当前java环境不支持RSA:{}", e); throw new RuntimeException("当前Java环境不支持RSA", e); } catch (InvalidKeySpecException e) { logger.error("无效的秘钥格式:{}", e); throw new RuntimeException("无效的秘钥格式", e); } } }
|