>
支付宝转账提现相关问题
2021-11-13 10:27
JAVA
  • 2397
  • 527
  • 64
  • 51

最近遇到一下支付宝相关的问题:

  1. 缺少应用公钥证书序列号

  2. 应用公钥证书不存在  

第一个问题是怎么发生的:

代码如下:

  AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
   APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
    //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.precreate
    AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
request.setBizContent("{\"out_trade_no\":\"2018092031012228432\","
        + "\"total_amount\":\"0.01\","
        + "\"subject\":\"subject\"}");
request.setNotifyUrl("商户外网可以访问的异步地址");
    AlipayTradePrecreateResponse response = alipayClient.execute(request);
if(response.isSuccess()){
        System.out.println("调用成功");
    } else {
        System.out.println("调用失败");
    }
System.out.println(response.getBody())

以上是一段java代码通过支护宝进行转账的一个案列

但是发现执行这个代码以后 就是第一个问题所产生的

那么是怎么回事呢?

原因就是:涉及金钱的就是不能用这个去转账 必须使用证书的模式才可以正常使用:

接下来我们就使用证书的模式去访问呢?

代码如下:

   //构造client
    CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
//设置网关地址
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
//设置应用Id
        certAlipayRequest.setAppId(app_id);
//设置应用私钥
        certAlipayRequest.setPrivateKey(privateKey);
//设置请求格式,固定值json
        certAlipayRequest.setFormat("json");
//设置字符集
        certAlipayRequest.setCharset(charset);
//设置签名类型
        certAlipayRequest.setSignType(sign_type);
//设置应用公钥证书路径
        certAlipayRequest.setCertPath(app_cert_path);
//设置支付宝公钥证书路径
        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
//设置支付宝根证书路径
        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
//构造client
        AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.precreate
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        request.setBizContent("{\"out_trade_no\":\"2018092031012228432\","
        + "\"total_amount\":\"0.01\","
        + "\"subject\":\"subject\"}");
        request.setNotifyUrl("商户外网可以访问的异步地址");
        AlipayTradePrecreateResponse response = alipayClient.certificateExecute(request);
        if(response.isSuccess()){
        System.out.println("调用成功");
        } else {
        System.out.println("调用失败");
        }
        System.out.println(response.getBody());
        请求方法
//(1)服务端请求返回,RSA2密钥和公钥证书请求方式不同,如当面付
//RSA2密钥请求
        response = alipayClient.execute(request);
//公钥证书请求请求
        response = alipayClient.certificateExecute(request);
//(2)网站类适用接口请求,RSA2密钥和公钥证书请求方式相同,如手机网站支付、电脑网站支付
        response = alipayClient.pageExecute(request);
//(3)客户端类适用接口请求请求,RSA2密钥和公钥证书请求方式相同,如app支付
        response = alipayClient.sdkExecute(request);

使用这个呢 就产生了我们的第二个问题:(应用公钥证书不存在  )

  1. 需要检查证书是否正确 

  2. 证书与oppid是否一致

  3. 支付宝是否开启证书模式去验证

  4. 证书路径是否完整

  5. 证书路径是否可以访问

    问题就解决咯!

    可参考开发文档进行开发!

    总结

    感谢各位博友的阅读 ,欢迎您们提出意见 让我们一起交流。感谢你们对CYBLOG的支持理解,本次讲解到此结束!


全部留言 ()
返回
顶部