新版支付宝WAP支付成功回调接口验签失败问题解决办法

支付宝旧版回调验签使用的是  AlipayNotify.verify(params),新版本采用的是AlipaySignature.rsaCheckV1,AlipaySignature类在新版SDK包的路径com.alipay.api.internal.util中,但是在验签过程中报以下错误:

java.io.IOException: ObjectIdentifier mismatch: 2.16.840.1.101.3.4.2.1

调用的代码:

AlipaySignature.rsaCheckV1(params,"支付宝公钥","UTF-8");

注意支付宝公钥是在签约的支付宝基础应用中查看,支付宝基础应用中有查看(进入开发者中心,找到应用2.0签约,点应用信息标签,在页面上有查看应用公钥、查看支付宝公钥标签,点查看支付宝公钥标签,复制支付宝公钥,作为上面rsaCheckV1方法的第二个参数值)。

设置了公钥后,还需要修改rsaCheckV1的程序代码,在SDK中找到AlipaySignature.java,找到:

 public static boolean rsaCheckContent(String content, String sign, String publicKey,
                                          String charset) throws AlipayApiException {
        try {
 
            PublicKey pubKey = getPublicKeyFromX509("RSA",
                new ByteArrayInputStream(publicKey.getBytes()));
 
            java.security.Signature signature = java.security.Signature            .getInstance(AlipayConstants.SIGN_ALGORITHMS);

          AlipayConstants.SIGN_ALGORITHMS的值是SHA1WithRSA,因为我们用的是RSA2公钥,所以需要将上面的代码改为:

           java.security.Signature signature = java.security.Signature            .getInstance("SHA256WithRSA");


     另外,因为使用SHA256,可能需要替换jre\lib\security目录下的两个jar包,US_export_policy.jar和local_policy.jar,从Oracle官方网站查找jce_policy-8.zip,替换本地的

jre\lib\security目录下这两个JAR包,按照上面的方法修改后,AlipaySignature.rsaCheckV1(params,"支付宝公钥","UTF-8"); 验签通过。







你可能感兴趣的:(电子商务,Java)