最近遇到一下支付宝相关的问题:
缺少应用公钥证书序列号
应用公钥证书不存在
第一个问题是怎么发生的:
代码如下:
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);
使用这个呢 就产生了我们的第二个问题:(应用公钥证书不存在 )
需要检查证书是否正确
证书与oppid是否一致
支付宝是否开启证书模式去验证
证书路径是否完整
证书路径是否可以访问
问题就解决咯!
可参考开发文档进行开发!
总结
感谢各位博友的阅读 ,欢迎您们提出意见 让我们一起交流。感谢你们对CYBLOG的支持理解,本次讲解到此结束!