最近遇到一下支付宝相关的问题:
缺少应用公钥证书序列号
应用公钥证书不存在
第一个问题是怎么发生的:
代码如下:
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的支持理解,本次讲解到此结束!






赞









