package com.doumee.config.alipay;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.alipay.v3.ApiException;
|
import com.alipay.v3.ApiClient;
|
import com.alipay.v3.util.model.AlipayConfig;
|
import com.alipay.v3.Configuration;
|
import com.alipay.v3.api.AlipayFundTransUniApi;
|
import com.alipay.v3.model.*;
|
import com.doumee.config.mybatis.SpringUtils;
|
import com.doumee.core.constants.ResponseStatus;
|
import com.doumee.core.exception.BusinessException;
|
import com.doumee.dao.dto.AlipayTransferDTO;
|
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
import lombok.extern.slf4j.Slf4j;
|
import okhttp3.OkHttpClient;
|
import com.wechat.pay.java.core.http.*;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import javax.annotation.PostConstruct;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Slf4j
|
@org.springframework.context.annotation.Configuration
|
public class AlipayFundTransUniTransfer {
|
|
@Autowired
|
private AlipayProperties alipayProperties;
|
|
private static AlipayConfig alipayConfig;
|
|
public static AlipayFundTransUniTransfer me() {
|
return SpringUtils.get().getBean(AlipayFundTransUniTransfer.class);
|
}
|
|
@PostConstruct
|
void init() {
|
this.loadAlipayConfig();
|
}
|
|
public void loadAlipayConfig() {
|
try {
|
AlipayConfig config = new AlipayConfig();
|
config.setServerUrl("https://openapi.alipay.com");
|
config.setAppId("2021006147660139");
|
String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=";
|
config.setPrivateKey(privateKey);
|
config.setAppCertPath("pay/pro/appCertPublicKey.crt");
|
config.setAlipayPublicCertPath("pay/pro/alipayCertPublicKey_RSA2.crt");
|
config.setRootCertPath("pay/pro/alipayRootCert.crt");
|
alipayConfig = config;
|
log.info("支付宝配置初始化成功, appId={}", config.getAppId());
|
} catch (Exception e) {
|
log.error("支付宝配置初始化失败: {}", e.getMessage(), e);
|
}
|
}
|
|
|
public static void main(String[] args) throws ApiException {
|
downLoadCertificates();
|
}
|
/**
|
* API安全加密配置
|
*/
|
private static RSAAutoCertificateConfig rsaAutoCertificateConfig() {
|
return new RSAAutoCertificateConfig.Builder()
|
// 商户号
|
.merchantId("1629568742")
|
// 商户API证书私钥的存放路径
|
.privateKeyFromPath("D://ptzs/apiclient_key.pem")
|
// 商户API证书序列号
|
.merchantSerialNumber("25D19D18217F4588841E5CD1AA0D1533DE8AF84A")
|
// APIv3密钥
|
.apiV3Key("NJTLJSTZYXZRGScaiwubuzichanbu666")
|
.build();
|
}
|
/**
|
* 下载证书
|
*/
|
public static void downLoadCertificates() {
|
OkHttpClient okHttpClient = new OkHttpClient();
|
HttpClient httpClient = new DefaultHttpClientBuilder()
|
.config(rsaAutoCertificateConfig())
|
.okHttpClient(okHttpClient)
|
.build();
|
HttpHeaders headers = new HttpHeaders();
|
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
|
HttpRequest executeSendGetHttpRequest = new HttpRequest.Builder()
|
.httpMethod(HttpMethod.GET)
|
.url("https://api.mch.weixin.qq.com/v3/certificates")
|
.headers(headers)
|
.build();
|
try {
|
HttpResponse<JSONObject> execute = httpClient.execute(executeSendGetHttpRequest, JSONObject.class);
|
JSONObject responseBody = execute.getServiceResponse();
|
log.info("下载平台证书返回:{}", responseBody.toString());
|
} catch (Exception e) {
|
log.error("下载平台证书异常", e);
|
}
|
}
|
|
// public static void testTransger( ) throws ApiException {
|
//
|
// // 初始化SDK
|
// ApiClient defaultClient = Configuration.getDefaultApiClient();
|
// // 初始化alipay参数(全局设置一次)
|
// defaultClient.setAlipayConfig(getAlipayConfig());
|
// // 构造请求参数以调用接口
|
// AlipayFundTransUniApi api = new AlipayFundTransUniApi();
|
// AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel();
|
// // 设置商家侧唯一订单号
|
// data.setOutBizNo("202606300001");
|
// // 设置订单总金额
|
// data.setTransAmount("1");
|
// // 设置描述特定的业务场景
|
// data.setBizScene("DIRECT_TRANSFER");
|
// // 设置业务产品码
|
// data.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
// // 设置转账业务的标题
|
// data.setOrderTitle("201905代发");
|
// // 设置原支付宝业务单号
|
// data.setOriginalOrderId("20190620110075000006640000063056");
|
// // 设置收款方信息
|
// Participant payeeInfo = new Participant();
|
// payeeInfo.setIdentity("15345690849");
|
// payeeInfo.setName("江萍");
|
// payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
|
// data.setPayeeInfo(payeeInfo);
|
// // 设置业务备注
|
// data.setRemark("201905代发");
|
// // 设置转账场景名称
|
// data.setTransferSceneName("佣金报酬");
|
//
|
// // 设置转账场景上报信息
|
// List<TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<TransferSceneReportInfo>();
|
// TransferSceneReportInfo transferSceneReportInfos0 = new TransferSceneReportInfo();
|
// transferSceneReportInfos0.setInfoType("佣金报酬说明");
|
// transferSceneReportInfos0.setInfoContent("3月家政服务报酬");
|
// transferSceneReportInfos.add(transferSceneReportInfos0);
|
// data.setTransferSceneReportInfos(transferSceneReportInfos);
|
//
|
// // 设置转账业务请求的扩展参数
|
// data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
|
//
|
// /* // 设置签名信息
|
// SignData signData = new SignData();
|
// signData.setOriSign("EqHFP0z4a9iaQ1ep==");
|
// signData.setPartnerId("签名被授权方支付宝账号ID");
|
// signData.setOriAppId("2021000185629012");
|
// signData.setOriOutBizNo("商户订单号");
|
// signData.setOriSignType("RSA2");
|
// signData.setOriCharSet("UTF-8");
|
// data.setSignData(signData);
|
//*/
|
// try {
|
// AlipayFundTransUniTransferResponseModel response = api.transfer(data);
|
// } catch (ApiException e) {
|
// AlipayFundTransUniTransferDefaultResponse errorObject = (AlipayFundTransUniTransferDefaultResponse) e.getErrorObject();
|
// System.out.println("调用失败:" + errorObject);
|
// }
|
// }
|
|
/**
|
* 单笔转账到支付宝账户
|
*
|
* @param dto 转账参数
|
* @return 支付宝转账单号
|
*/
|
public static String transfer(AlipayTransferDTO dto) throws ApiException {
|
ApiClient defaultClient = Configuration.getDefaultApiClient();
|
// 构造请求参数以调用接口
|
defaultClient.setAlipayConfig(alipayConfig);
|
AlipayFundTransUniApi api = new AlipayFundTransUniApi();
|
AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel();
|
// 设置商家侧唯一订单号
|
data.setOutBizNo(dto.getOutBizNo());
|
// 设置订单总金额
|
data.setTransAmount("1");
|
// 设置描述特定的业务场景
|
data.setOutBizNo(dto.getOutBizNo());
|
data.setTransAmount(dto.getTransAmount().setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
|
data.setBizScene("DIRECT_TRANSFER");
|
// 设置业务产品码
|
data.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
// 设置转账业务的标题
|
data.setOrderTitle("佣金报酬");
|
// 设置原支付宝业务单号
|
data.setOriginalOrderId(dto.getOutBizNo());
|
// 设置收款方信息
|
data.setOrderTitle("佣金报酬");
|
Participant payeeInfo = new Participant();
|
payeeInfo.setIdentity(dto.getPayeeAccount());
|
payeeInfo.setName(dto.getPayeeName());
|
payeeInfo.setIdentity(dto.getPayeeAccount());
|
payeeInfo.setName(dto.getPayeeName());
|
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
|
data.setPayeeInfo(payeeInfo);
|
// 设置业务备注
|
data.setRemark("佣金报酬");
|
// 设置转账场景名称
|
data.setRemark(dto.getRemark());
|
data.setTransferSceneName("佣金报酬");
|
// 设置转账场景上报信息
|
List<TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<TransferSceneReportInfo>();
|
TransferSceneReportInfo transferSceneReportInfos0 = new TransferSceneReportInfo();
|
transferSceneReportInfos0.setInfoType("佣金报酬说明");
|
transferSceneReportInfos0.setInfoContent("佣金报酬");
|
transferSceneReportInfos.add(transferSceneReportInfos0);
|
data.setTransferSceneReportInfos(transferSceneReportInfos);
|
List<TransferSceneReportInfo> reportInfos = new ArrayList<>();
|
TransferSceneReportInfo reportInfo = new TransferSceneReportInfo();
|
reportInfo.setInfoType("佣金报酬说明");
|
reportInfo.setInfoContent("佣金报酬");
|
reportInfos.add(reportInfo);
|
data.setTransferSceneReportInfos(reportInfos);
|
|
// 设置转账业务请求的扩展参数
|
data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");
|
|
/* // 设置签名信息
|
SignData signData = new SignData();
|
signData.setOriSign("EqHFP0z4a9iaQ1ep==");
|
signData.setPartnerId("签名被授权方支付宝账号ID");
|
signData.setOriAppId("2021000185629012");
|
signData.setOriOutBizNo("商户订单号");
|
signData.setOriSignType("RSA2");
|
signData.setOriCharSet("UTF-8");
|
data.setSignData(signData);
|
*/
|
try {
|
AlipayFundTransUniTransferResponseModel response = api.transfer(data);
|
log.info("支付宝转账成功, outBizNo={}, orderId={}", dto.getOutBizNo(), response.getOrderId());
|
return response.getOrderId();
|
} catch (ApiException e) {
|
AlipayFundTransUniTransferDefaultResponse errorObject = (AlipayFundTransUniTransferDefaultResponse) e.getErrorObject();
|
System.out.println("调用失败:" + errorObject);
|
log.error("支付宝转账失败, outBizNo={}, error={}", dto.getOutBizNo(), errorObject);
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
|
"转账失败:" + (errorObject != null ? errorObject.toString() : e.getMessage()));
|
}
|
}
|
|
|
// private static AlipayConfig getAlipayConfig() {
|
// AlipayConfig alipayConfig = new AlipayConfig();
|
// alipayConfig.setServerUrl("https://openapi.alipay.com");
|
// alipayConfig.setAppId("2021006147660139");
|
// String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEeqqkZztBHfK+vpyBi6ejgDTHZuZ3yiuXds+lRBbMo/g24F5trH+oLHW0gMhSxihFfQBBIpVBXDsPQK4ZkhDWTaOBktnU1UMRoOEiaaZU6EiWy10ePFUmpdXpkCQEp7rc88OwI90p58S3+L+Ckak60WqNwJBdB5YGBaUunryBA78U4zW1KNY7JvoRnZDcFMQiczikwUzhO7EAi0yVrVpsVsc9s87mcS4uOJKx4qb2E83r9RJ1z30db+cIIZRiLP2oNZBLYzgKpOouE+uIgxhQzlh6cOASNZQulXuUjoT/+Y9w4njfl4TmKIXWcJFKIMc6kMiux9tTncpp0TqRwk1tAgMBAAECggEALkSYtJheusnbpRFr95G0i2sggqh3s1PXihZ/dXKgT9Z5GCsj8X3Cng7CNRxykBN73kk+axhCv56Bhej8Vqcv8ddcnqG/TEBgR+Fzws/QTIRau6/uILWic7RvuE2qPbJl7aw1s9/uL/UVPSGFr7CvgltYVUM4e7/Sk1529JCK4XJfoXP5tKJ3OaXssvaFnCKEU8IGQkjRG+lUZJhAHVtClGHtgrhevgRhy2zre5wp2qSa8d/MqrPruSYS02hn9b5Nl6i2PlUS6dGlJ4lrxYTG22ukYYoxAPNPS7gnvmveXonWP7b5tPhKRpZjnoySojz3WECUlhz/v8wM1cDrpq+GQQKBgQDsc7y2rlx4f77a7ORfb5/qWHCOJs1cIzggj0kJ7TgFGe71kbCQ5nywD/Fe5V9OwbW+DCxOME+SrrHeiK4axWiu5si/1JlurJoxNy+4k4ywk3ZA3Nv2aBhlPqfkwDhJ0z7Mgsq2c/YgnVddmSvKZoC39wA77ovks4GDxaBOt8N7PQKBgQDUuPGgzkwcgb60UdaxfMbacrPsW26vDxaE4ceuXo2m8KDiCIqkF2y9r6AdWMTgGGSJwOsk7+FP+21VdRivCg9HcOLWngveUc6xDIuqKHVpemMo3SdCF4Wqf96rRc3VOBr5cfIdWxeorZf5umMyKnIAjAFETOOrK7eLTTmjyLD98QKBgB82S+Plcklpu3zUpnS+nGJn2Du7fYI7F+6cW2zXBn0N5lA+Mgt+kVkAUcFQD9uqkF4M51BO6kIXk10nt6vLAT2NM1S3MKW+XQBAI6l+uKSaYpK/VL3bEdVThwAYK5X7L5/5Z97bwdKeUmkFjhVCoJ0oGrzOiWLgGymUzct2UHSVAoGBAMb+7Cs+Ub0pMrmFBY6r52pbey1Uq0pglvRgMmhQU7sjx50r2GaA81zPer15WVM5/nNPYaoALYqg7jrPe/PjOT/fvpR+7SNg7DZ8QftANfYiY7jKifst/gDt9ePLPS6FedZ4XcJQgOVu34jicAFx64vPbS/zrddm4iEScSVijRBBAoGAXCheERsx8+n16Us/DttXFUa1nc7+D8WR6buM1QMZgQCVF2qp3XtM+FusCKL4+q1+dtag8svLjJFp9QbaAXqX8Zk7rn8wUHbDloPTPy9XWgrPowyL9MPU+e/Rq8Hr6TWPDBd4TU64YzIEfBQYpJXfZbXhVYmK3o7xHXKB1x4vvEM=";
|
// alipayConfig.setPrivateKey(privateKey);
|
// alipayConfig.setAppCertPath("pay/pro/appCertPublicKey.crt");
|
// alipayConfig.setAlipayPublicCertPath("pay/pro/alipayCertPublicKey_RSA2.crt");
|
// alipayConfig.setRootCertPath("pay/pro/alipayRootCert.crt");
|
//
|
// return alipayConfig;
|
// }
|
}
|