>
支付宝转账提现相关问题
2021-11-13 10:27
JAVA
  • 4045
  • 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的支持理解,本次讲解到此结束!


全部留言 ()
返回
顶部