java 对接支付宝支付 提现操作

引入依赖

复制代码
<!--引入阿里支付-->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.40.607.ALL</version>
            <!--<version>4.40.506.ALL</version>-->
        </dependency>
复制代码
AliPayment.java
复制代码
package com.mmwzcloud.jszj.module.jszj.payment;

import com.alipay.api.AlipayApiException;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.*;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;

import com.mmwzcloud.jszj.framework.common.exception.ErrorCode;
import com.mmwzcloud.jszj.framework.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 阿里支付类
 */
@Service
@Slf4j
public class AliPayment {
    private static Map<String,DefaultAlipayClient> aliCertClientMap = new HashMap();


    public static String appid="202";
    public static String privateKey="MIIEvAIB";
    public static String sysServiceProviderId="";



    public DefaultAlipayClient getAliCertClient() {
        DefaultAlipayClient aliCertClient = aliCertClientMap.get("aliCertClient");
        if(aliCertClient != null){
            return aliCertClient;
        }

        File appCert = new File("aliPayCert/appCertPublicKey_2021006118637370.crt");
        File alipayCert = new File("aliPayCert/alipayCertPublicKey_RSA2.crt");
        File alipayRootCert = new File("aliPayCert/alipayRootCert.crt");

        try {
            if (!appCert.exists()) {
                InputStream stream = AliPayment.class.getResourceAsStream("/aliPayCert/appCertPublicKey_2021006XXXXXX.crt");
                FileUtils.copyInputStreamToFile(stream, appCert);
            }
            if (!alipayCert.exists()) {
                InputStream stream = AliPayment.class.getResourceAsStream("/aliPayCert/alipayCertPublicKey_RSA2.crt");
                FileUtils.copyInputStreamToFile(stream, alipayCert);
            }
            if (!alipayRootCert.exists()) {
                InputStream stream = AliPayment.class.getResourceAsStream("/aliPayCert/alipayRootCert.crt");
                FileUtils.copyInputStreamToFile(stream, alipayRootCert);
            }
        } catch (IOException e) {
            log.error(e.getMessage());
            throw new ServiceException(new ErrorCode(1003,e.getMessage()));
        }

        String appCertPath = appCert.getAbsolutePath();
        String alipayCertPath = alipayCert.getAbsolutePath();
        String alipayRootCertPath = alipayRootCert.getAbsolutePath();


        String privateKey=this.privateKey;

        CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
        certAlipayRequest.setAppId(this.appid);
        certAlipayRequest.setPrivateKey(privateKey);
        certAlipayRequest.setFormat("JSON");
        certAlipayRequest.setCharset("utf-8");
        certAlipayRequest.setSignType("RSA2");
        certAlipayRequest.setCertPath(appCertPath);
        certAlipayRequest.setAlipayPublicCertPath(alipayCertPath);
        certAlipayRequest.setRootCertPath(alipayRootCertPath);

        DefaultAlipayClient alipayClient = null;

        try {
            alipayClient = new DefaultAlipayClient(certAlipayRequest);
            aliCertClientMap.put("aliCertClient",alipayClient);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return alipayClient;
    }


    public  boolean transfer(){
        DefaultAlipayClient alipayClient = this.getAliCertClient();

        TransferSceneReportInfo info = new TransferSceneReportInfo();
        info.setInfoType("结算款项名称");
        info.setInfoContent("邀请新用户奖励");

        AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
        model.setOutBizNo("2025041111122");
        model.setTransAmount("0.1");
        model.setProductCode("TRANS_ACCOUNT_NO_PWD");
        model.setBizScene("DIRECT_TRANSFER");
        model.setOrderTitle("提现");
        model.setTransferSceneName("业务结算");//https://b.alipay.com/page/bizfund/transferScene/list 需审核后设置生效
        model.setTransferSceneReportInfos(Arrays.asList(info));

        Participant payee = new Participant();
        payee.setIdentityType("ALIPAY_LOGON_ID");
        payee.setIdentity("13462627296");
        payee.setName("景春德");
        model.setPayeeInfo(payee);

        AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
        request.setBizModel(model);          // SDK 帮你序列化,不会错
        AlipayFundTransUniTransferResponse response = null;
        try {
            response = alipayClient.certificateExecute(request);
        } catch (AlipayApiException e) {
            throw new RuntimeException(e);
        }
        System.out.println(response.getBody());
        return true;
    }

    public static void main(String[] args) {
        AliPayment aliPayment = new AliPayment();
        boolean transfer = aliPayment.transfer();
    }
}

接口文档:https://opendocs.alipay.com/open/62987723_alipay.fund.trans.uni.transfer?scene=ca56bca529e64125a2786703c6192d41&pathHash=66064890

转账场景申请列表

https://b.alipay.com/page/bizfund/transferScene/list

相关推荐
axng pmje3 分钟前
Java语法进阶
java·开发语言·jvm
rKWP8gKv715 分钟前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫18 分钟前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_4352879218 分钟前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本20 分钟前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
cui_ruicheng24 分钟前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
蚰蜒螟37 分钟前
深入 Linux 内核同步机制:从 futex 到 spinlock 的完整旅程
linux·windows·microsoft
运维全栈笔记38 分钟前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
yaoxin5211231 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai1 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python