在开发工作中,时常会需要调用支付宝的相关业务接口,支付宝的接口算是国内写的比较清晰明了的,不过在调用前,需要我们进入【支付宝开放平台】,创建应用并配置密钥或证书。
登录支付宝开发平台并创建应用,这里我们通常使用企业账号登录 登录地址:https://openhome.alipay.com/ 创建应用是我们调用支付宝接口的前提 创建成功后,进入应用设置,左上角的 appId 很重要,在很多接口文档中都会出现,也是请求头的重要组参数使用支付宝开放平台助手,生成密钥和证书。 支付宝接口支持密钥和证书两种模式,一般建议使用证书,因为部分接口必须使用证书。比如【支付宝转账】,点击图片上的连接可以进入说明文档并下载【支付宝开放平台助手】 安装好应用后进入【支付宝开放平台开发助手】 进入后,选择 RSA2,点击生成密钥,然后点击下方的获取 CSR文件,该文件是生成证书用的 注意,这里的【组织/公司】名称需要和支付宝账号的名称一致,否则会证书会生成失败点击下方的打开文件位置可以找到生成的CSR文件了回到刚才的设置界面,选择加签模式为证书类型,如果选择公钥,直接输入刚才生成的公钥就可以了下载证书,上传 CSR 文件生成证书成功后,需要将证书下载下来,一共三个,在调用接口的时候使用面简单介绍一下接口的调用 首先我们引入 sdk <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.33.39.ALL</version> </dependency>支付宝调用接口都需要生成一个 AlipayClient 对象,然后设置参数,参数包括 appId和之前下载的证书。 certAlipayRequest.setCertPath(“app_cert_path 文件绝对路径”); certAlipayRequest.setAlipayPublicCertPath(“alipay_cert_path 文件绝对路径”); certAlipayRequest.setRootCertPath(“alipay_root_cert_path 文件绝对路径”); 这三个参数对应刚刚下载的三个证书。
certAlipayRequest.setServerUrl(“https://openapi.alipay.com/gateway.do”); 这个是支付宝网关地址,选择默认,也可以在支付宝开发平台设置
certAlipayRequest.setAppId(“202100*******044”); appId 就是我们创建的应用 id,详情看第二步
package com.study.deploy.util; import com.alibaba.fastjson2.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.CertAlipayRequest; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayFundTransUniTransferRequest; import com.alipay.api.response.AlipayFundTransUniTransferResponse; public class Test { public static void main(String[] args) throws AlipayApiException { AlipayClient alipayClient = AliPayClientHeader.certClient(); // 不同的接口,需要的 request 类是不一样的,可以在支付宝的文档和示例中查看,这里是支付宝转账的类 AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest(); JSONObject param = new JSONObject(); // param 为参数,不同的接口需要的参数不同 request.setBizContent(param.toJSONString()); // certificateExecute()-为证书请求模式 // execute()-为无证书模式 AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request); } static class AliPayClientHeader{ // 付宝证书模式请求 Client public static AlipayClient certClient() throws AlipayApiException { CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); certAlipayRequest.setAppId("202100*******044"); //APPID 即创建应用后生成,详情见创建应用并获取 APPID certAlipayRequest.setPrivateKey("xx"); //开发者应用私钥,由开发者自己生成 certAlipayRequest.setFormat("JSON"); //参数返回格式,只支持 json 格式 certAlipayRequest.setCharset("utf-8"); //请求和签名使用的字符编码格式,支持 GBK和 UTF-8 certAlipayRequest.setSignType("RSA2"); //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。 certAlipayRequest.setCertPath("app_cert_path 文件绝对路径"); //应用公钥证书路径(app_cert_path 文件绝对路径) certAlipayRequest.setAlipayPublicCertPath("alipay_cert_path 文件绝对路径"); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径) certAlipayRequest.setRootCertPath("alipay_root_cert_path 文件绝对路径"); //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径) AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest); return alipayClient; } // 支付宝无证书模式请求 Client public static AlipayClient outCertClient() throws AlipayApiException { AlipayClient alipayClient = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do", "02100*******044", "privateKey", "JSON", "utf-8", "aliPublicKey", "RSA2"); return alipayClient; } } }最后的 response 就是支付宝的响应了,大家可以在支付宝文档中心查看到更详细的示例和需要的参数。 支付宝转账接口文档:https://opendocs.alipay.com/open/02byuo?scene=ca56bca529e64125a2786703c6192d41
![]() |
标签: #支付宝 #公钥模式和证书模式怎么选择