ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

支付宝开发转账接口

2021-02-26 22:33:33  阅读:529  来源: 互联网

标签:转账 支付宝 String certAlipayRequest cert static 接口 public


提现功能,需要调用支付宝的单笔转账接口。支付宝文档上边一开始写的是需要使用公钥证书去请求,然而我的程序一开始写的是使用公钥密钥去请求的。需要接入的话就必须修改原先的请求方式改成证书请求,修改方式会影响整个程序的支付宝请求环节。最后支付宝技术客服建议让我去创建一个新的应用来使用这个接口,于是终于可以开发这个功能。--

前言

该程序后端是使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有