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

相关推荐
华如锦10 小时前
四:从零搭建一个RAG
java·开发语言·人工智能·python·机器学习·spring cloud·计算机视觉
Tony_yitao10 小时前
22.华为OD机试真题:数组拼接(Java实现,100分通关)
java·算法·华为od·algorithm
JavaGuru_LiuYu10 小时前
Spring Boot 整合 SSE(Server-Sent Events)
java·spring boot·后端·sse
爬山算法10 小时前
Hibernate(26)什么是Hibernate的透明持久化?
java·后端·hibernate
彭于晏Yan10 小时前
Springboot实现数据脱敏
java·spring boot·后端
向阳蒲公英10 小时前
Pycharm2025版本配置Anaconda步骤
python
luming-0210 小时前
java报错解决:sun.net.utils不存
java·经验分享·bug·.net·intellij-idea
Darkershadow10 小时前
蓝牙学习之uuid与mac
python·学习·ble
别多香了10 小时前
系统批量运维管理器 paramiko
linux·运维·服务器
北海有初拥10 小时前
Python基础语法万字详解
java·开发语言·python