支付宝支付sign_type从RSA到RSA2遇到的问题

  1. 公钥私钥:
    1. 使用RSA签名验签工具windows_V1.4生成公钥私钥(秘钥长度2048为RSA2)
    2. 秘钥自己保存使用,登录支付宝开放平台,将公钥保存到app_id对应的应用公钥那里,保存完成,会生成对应的支付宝公钥,此公钥用来之后代码使用。
  2. 支付以及回调流程:
    1. 预下单等接口的sign_type参数,统一为RSA2,并且,生成签名方法需要更换如下:

       String sign = AlipaySignature.rsa256Sign(AlipaySignature.getSignContent(map), this.privateKey, "utf-8");
      
    2. 初始化支付宝客户端时,需要使用带有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")
       );	
      
    3. 验签时,需要使用验证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");
      
posted @ 2018-07-20 14:41  CalronLoveRonnie  阅读(8690)  评论(0编辑  收藏  举报
AmazingCounters.com