上一篇说明app支付宝绑定,接下来是提现,调用支付宝转账接口实现提现功能

支付宝转账参数实体类:

package com.framework.loippi.plugins.aliapppay.withdrawal;

import java.math.BigDecimal;

/**
 * 支付宝转账参数实体类
 */
public class Withdrawal {
    //商户端的唯一订单号,对于同一笔转账请求,商户需保证该订单号唯一
    private String outBizNo;

    //转账标题
    private String orderTitle;

    //转账金额 取值范围[0.1,100000000];
    private BigDecimal transAmount;

    //收款方唯一标识(支付宝用户ID)
    private String identity;

    //业务备注
    private String remark;


    public String getOutBizNo() {
        return outBizNo;
    }

    public void setOutBizNo(String outBizNo) {
        this.outBizNo = outBizNo;
    }

    public String getOrderTitle() {
        return orderTitle;
    }

    public void setOrderTitle(String orderTitle) {
        this.orderTitle = orderTitle;
    }

    public BigDecimal getTransAmount() {
        return transAmount;
    }

    public void setTransAmount(BigDecimal transAmount) {
        this.transAmount = transAmount;
    }

    public String getIdentity() {
        return identity;
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

}


支付宝sdk版本:
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.10.140.ALL</version>
</dependency>
支付宝提现工具类(使用证书格式):
package com.framework.loippi.plugins.aliapppay.withdrawal;


import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.framework.loippi.cache.ConfigCache;


public class AliPayWithdrawalUtil {
    // 支付宝应用appid
    private static String appid = "你的应用appID";

    //支付宝应用私钥
    private static String merchantPrivateKey = "应用私钥";

    //支付宝应用公钥证书路径
    private static String appCertPublicKey = "应用公钥证书路径";

    //支付宝公钥证书路径
    private static String certPublicKey = "公钥证书路径";

    //支付宝根证书路径
    private static String rootCert = "根证书路径";

    /**
     *支付宝提现功能
     * @param withdrawal 支付宝转账参数实体类
     * @return AlipayFundTransUniTransferResponse response
     * 判断成功失败 response.isSuccess():true 成功 ,false失败
     * 成功获取交易单号:
     *     JSONObject jsonObject = JSONObject.parseObject(response.getBody());
     *     String alipay_fund_trans_uni_transfer_response = jsonObject.getString("alipay_fund_trans_uni_transfer_response");
     *     JSONObject parseObject = JSONObject.parseObject(alipay_fund_trans_uni_transfer_response);
     * 失败获取错误结果:response.getSubMsg()
     * 成功获取交易单号:parseObject.getString("order_id")
     */
    public static AlipayFundTransUniTransferResponse withdrawal(Withdrawal withdrawal){
        AlipayFundTransUniTransferResponse response = null;
        try {
            //
            String rootPath =AliPayWithdrawalUtil.class.getResource("/").getPath();
            System.out.println("项目据对路径"+rootPath);
            CertAlipayRequest   certAlipayRequest   =   new CertAlipayRequest();
            certAlipayRequest.setServerUrl( "https://openapi.alipay.com/gateway.do");
            certAlipayRequest.setAppId ( appid );
            certAlipayRequest.setPrivateKey ( merchantPrivateKey );
            certAlipayRequest.setFormat ( "json" );
            certAlipayRequest.setCharset ( "UTF-8" );
            certAlipayRequest.setSignType ( "RSA2" );
            certAlipayRequest.setCertPath ( rootPath+appCertPublicKey);
            certAlipayRequest.setAlipayPublicCertPath ( rootPath+certPublicKey );
            certAlipayRequest.setRootCertPath ( rootPath+rootCert );
            DefaultAlipayClient alipayClient   =   new   DefaultAlipayClient(certAlipayRequest);
            AlipayFundTransUniTransferRequest   request   =   new   AlipayFundTransUniTransferRequest ();
            request.setBizContent ( "{"   +
                    "\"out_biz_no\":\""+withdrawal.getOutBizNo()+"\","   +
                    "\"trans_amount\":"+withdrawal.getTransAmount()+","   +
                    "\"product_code\":\"TRANS_ACCOUNT_NO_PWD\","   +
                    "\"biz_scene\":\"DIRECT_TRANSFER\","   +
                    "\"order_title\":\""+withdrawal.getOrderTitle()+"\","   +
                    "\"payee_info\":{"   +
                    "\"identity\":\""+withdrawal.getIdentity()+"\","   +
                    "\"identity_type\":\"ALIPAY_USER_ID\""   +
                    "    },"   +
                    "\"remark\":\""+withdrawal.getRemark()+"\","   +
                    "\"business_params\":\"{\\\"payer_show_name\\\":\\\"云南顺路科技有限公司\\\"}\","   +
                    "  }" );
               response   =   alipayClient.certificateExecute ( request );
        }catch (Exception e){
            e.printStackTrace();
        }
        return response;
    }



    public static void main(String[] args) {
//        Withdrawal withdrawal = new Withdrawal();
//        withdrawal.setTransAmount(new BigDecimal("0.1"));
//        withdrawal.setRemark("提现");
//        withdrawal.setOutBizNo( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//        withdrawal.setOrderTitle("提现");
//        withdrawal.setIdentity("2088702126358350");
//        String result="";
//        try {
//            result = AliPayWithdrawalByOldSDKUtil.withdrawal(withdrawal);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        System.out.println(result);
        try {
            System.out.println(AliPayWithdrawalUtil.class.getResource("/").getPath());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}