支付宝开发转账接口
作者:互联网
提现功能,需要调用支付宝的单笔转账接口。支付宝文档上边一开始写的是需要使用公钥证书去请求,然而我的程序一开始写的是使用公钥密钥去请求的。需要接入的话就必须修改原先的请求方式改成证书请求,修改方式会影响整个程序的支付宝请求环节。最后支付宝技术客服建议让我去创建一个新的应用来使用这个接口,于是终于可以开发这个功能。--
前言
该程序后端是使用springboot框架进行开发。单笔转账接口。
新建一个配置文件类
public class WdfromAppConfig {
public final static String APPID = "202100212";
public final static String APP_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAAS";
public final static String APP_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgK";
public final static String CERT_PATH = getRootFile("cert/appCertPublicKey_20210025.crt");
public final static String ALIPAY_PUBLIC_CERT_PATH = getRootFile("cert/alipayCertPublicKey_RSA2.crt");
public final static String ALIPAY_ROOT_CERT_PATH = getRootFile("cert/alipayRootCert.crt");
private static String getRootFile(String path) {
ClassPathResource cpr = new ClassPathResource(path);
File file = null;
try {
file = cpr.getFile();
return file.getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
注意其中的证书获取部分代码,支付宝接口要求传入绝对地址。我这里的证书文件存放在resources\cert
文件夹下面。然后使用springboot获取根目录的方式来动态获取根路径ClassPathResource cpr = new ClassPathResource(path);
转账函数
public AlipayFundTransUniTransferResponse transfer(String out_biz_no, BigDecimal trans_amount, String identity) {
String identity_type = "ALIPAY_LOGON_ID";
String product_code = "TRANS_ACCOUNT_NO_PWD";
AlipayClient alipayClient = initClient();
if (null!=alipayClient){
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
request.setBizContent("{" +
"\"out_biz_no\":\""+out_biz_no +
"\"trans_amount\":"+trans_amount+"," +
"\"product_code\":\""+product_code+"\"," +
"\"biz_scene\":\"DIRECT_TRANSFER\"," +
"\"order_title\":\"【xxx】-佣金到账\"," +
"\"payee_info\":{" +
"\"identity\":\""+identity+"\"," +
"\"identity_type\":\""+identity_type+"\"}," +
"\"remark\":\"单笔转账\"" +
" }");
AlipayFundTransUniTransferResponse response = null;
try {
response = alipayClient.certificateExecute(request);
return response;
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
return null;
}
请求客户端初始化
private AlipayClient initClient() {
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); //gateway:支付宝网关(固定)https://openapi.alipay.com/gateway.do
certAlipayRequest.setAppId(WdfromAppConfig.APPID); //APPID 即创建应用后生成,详情见创建应用并获取 APPID
certAlipayRequest.setPrivateKey(WdfromAppConfig.APP_PRIVATE_KEY); //开发者应用私钥,由开发者自己生成
certAlipayRequest.setFormat("json"); //参数返回格式,只支持 json 格式
certAlipayRequest.setCharset("UTF-8"); //请求和签名使用的字符编码格式,支持 GBK和 UTF-8
certAlipayRequest.setSignType("RSA2"); //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。
certAlipayRequest.setCertPath(WdfromAppConfig.CERT_PATH); //应用公钥证书路径(app_cert_path 文件绝对路径)
certAlipayRequest.setAlipayPublicCertPath(WdfromAppConfig.ALIPAY_PUBLIC_CERT_PATH); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径)
certAlipayRequest.setRootCertPath(WdfromAppConfig.ALIPAY_ROOT_CERT_PATH); //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径)
try {
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
return alipayClient;
} catch (AlipayApiException e) {
e.printStackTrace();
}
return null;
}
标签:转账,支付宝,String,certAlipayRequest,cert,static,接口,public 来源: https://www.cnblogs.com/eangaie/p/14454211.html