支付宝支付sign_type从RSA到RSA2遇到的问题
- 公钥私钥:
- 使用RSA签名验签工具windows_V1.4生成公钥私钥(秘钥长度2048为RSA2)
- 秘钥自己保存使用,登录支付宝开放平台,将公钥保存到app_id对应的应用公钥那里,保存完成,会生成对应的支付宝公钥,此公钥用来之后代码使用。
- 支付以及回调流程:
-
预下单等接口的sign_type参数,统一为RSA2,并且,生成签名方法需要更换如下:
String sign = AlipaySignature.rsa256Sign(AlipaySignature.getSignContent(map), this.privateKey, "utf-8");
-
初始化支付宝客户端时,需要使用带有sing_type的构造参数,并且传递参数为RSA2:
//初始化支付宝支付客户端 this.alipayClient = new DefaultAlipayClient( ConstanHolder.get("pay.alipay.url") ,ConstanHolder.get("pay.alipay.app_id") ,privateKey ,"json" ,"UTF-8" ,publicKey ,ConstanHolder.get("pay.alipay.sign_type") );
-
验签时,需要使用验证RSA2的方法(看了支付宝的实现方式,也可以采用rsaCheckV1(Map<String, String> params, String publicKey,String charset,String signType)这个方法来验签,必须传递signType为RSA2)
Map<String,String> paramMap = req.getParamMap(); String sign = paramMap.get("sign"); String content = AlipaySignature.getSignCheckContentV1(paramMap); boolean flag = AlipaySignature.rsa256CheckContent(content,sign, publicKey, "UTF-8");
-