|
|
@@ -10,14 +10,23 @@ import com.alipay.api.domain.AlipayFundTransPagePayModel;
|
|
|
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
|
|
|
import com.alipay.api.domain.AlipayUserAgreementPageSignModel;
|
|
|
import com.alipay.api.domain.AlipayUserAgreementQueryModel;
|
|
|
+import com.alipay.api.domain.AlipayFundExpandindirectCreateModel;
|
|
|
+import com.alipay.api.domain.AlipayFundExpandindirectOrderQueryModel;
|
|
|
+import com.alipay.api.domain.AlipayFundExpandindirectOrderCancelModel;
|
|
|
import com.alipay.api.domain.BankcardExtInfo;
|
|
|
import com.alipay.api.domain.Participant;
|
|
|
+import com.alipay.api.domain.SecondaryPartnerInfo;
|
|
|
+import com.alipay.api.FileItem;
|
|
|
import com.alipay.api.request.AlipayFundAccountbookCreateRequest;
|
|
|
import com.alipay.api.request.AlipayFundAccountbookQueryRequest;
|
|
|
import com.alipay.api.request.AlipayFundTransCommonQueryRequest;
|
|
|
import com.alipay.api.request.AlipayFundTransPagePayRequest;
|
|
|
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
|
|
|
import com.alipay.api.request.AlipayUserAgreementPageSignRequest;
|
|
|
+import com.alipay.api.request.AlipayFundExpandindirectCreateRequest;
|
|
|
+import com.alipay.api.request.AlipayFundExpandindirectImageUploadRequest;
|
|
|
+import com.alipay.api.request.AlipayFundExpandindirectOrderCancelRequest;
|
|
|
+import com.alipay.api.request.AlipayFundExpandindirectOrderQueryRequest;
|
|
|
import com.alipay.api.request.AlipayUserAgreementQueryRequest;
|
|
|
import com.alipay.api.response.AlipayFundAccountbookCreateResponse;
|
|
|
import com.alipay.api.response.AlipayFundAccountbookQueryResponse;
|
|
|
@@ -25,6 +34,10 @@ import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
|
|
|
import com.alipay.api.response.AlipayFundTransPagePayResponse;
|
|
|
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
|
|
|
import com.alipay.api.response.AlipayUserAgreementPageSignResponse;
|
|
|
+import com.alipay.api.response.AlipayFundExpandindirectCreateResponse;
|
|
|
+import com.alipay.api.response.AlipayFundExpandindirectImageUploadResponse;
|
|
|
+import com.alipay.api.response.AlipayFundExpandindirectOrderCancelResponse;
|
|
|
+import com.alipay.api.response.AlipayFundExpandindirectOrderQueryResponse;
|
|
|
import com.alipay.api.response.AlipayUserAgreementQueryResponse;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.payment.platform.common.exception.BusinessException;
|
|
|
@@ -199,7 +212,114 @@ public class AlipayTransferService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // ==================== 2. 开通记账本 ====================
|
|
|
+ // ==================== 2. 进件 ====================
|
|
|
+
|
|
|
+ private static final String ONBOARD_PRODUCT_CODE = "MERCHANT_TRANSFER_EXPAND_INDIRECT";
|
|
|
+ private static final String ONBOARD_BIZ_SCENE = "ENTRUST_SATF_TRANSFER";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * alipay.fund.expandindirect.image.upload — 上传进件图片,返回 image_id 作为 scene_image 的 file_key
|
|
|
+ */
|
|
|
+ public String uploadImage(String enterpriseId, byte[] fileBytes, String fileName) {
|
|
|
+ try {
|
|
|
+ AlipayFundExpandindirectImageUploadRequest request = new AlipayFundExpandindirectImageUploadRequest();
|
|
|
+ request.setProductCode(ONBOARD_PRODUCT_CODE);
|
|
|
+ request.setBizScene(ONBOARD_BIZ_SCENE);
|
|
|
+ request.setImageType("jpg");
|
|
|
+ FileItem fileItem = new FileItem(fileName, fileBytes, fileName.substring(fileName.lastIndexOf('.') + 1));
|
|
|
+ request.setImageContent(fileItem);
|
|
|
+ AlipayFundExpandindirectImageUploadResponse response =
|
|
|
+ alipayClientFactory.getClient(enterpriseId).execute(request);
|
|
|
+ if (!response.isSuccess())
|
|
|
+ throw new BusinessException(400, "上传进件图片失败: " + response.getMsg());
|
|
|
+ return response.getImageId();
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ throw new BusinessException(400, "上传进件图片失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** alipay.fund.expandindirect.create — 创建进件单 */
|
|
|
+ public Map<String, String> createOnboard(String enterpriseId, String sceneCode,
|
|
|
+ String sceneDirections, String sceneImageKeys,
|
|
|
+ String sites, String alipayUserId) {
|
|
|
+ String outBizNo = SnowflakeIdGenerator.nextIdStr();
|
|
|
+ try {
|
|
|
+ AlipayFundExpandindirectCreateModel model = new AlipayFundExpandindirectCreateModel();
|
|
|
+ model.setProductCode(ONBOARD_PRODUCT_CODE);
|
|
|
+ model.setBizScene(ONBOARD_BIZ_SCENE);
|
|
|
+ model.setOutBizNo(outBizNo);
|
|
|
+ model.setBizType("CREATE");
|
|
|
+ model.setSceneCode(sceneCode);
|
|
|
+ model.setSceneDirections(sceneDirections);
|
|
|
+ model.setSceneImage(sceneImageKeys);
|
|
|
+ if (sites != null && !sites.isBlank()) model.setSites(sites);
|
|
|
+ SecondaryPartnerInfo partner = new SecondaryPartnerInfo();
|
|
|
+ partner.setIdentity(alipayUserId);
|
|
|
+ partner.setIdentityType("ALIPAY_USER_ID");
|
|
|
+ model.setSecondaryPartnerInfo(partner);
|
|
|
+
|
|
|
+ AlipayFundExpandindirectCreateRequest request = new AlipayFundExpandindirectCreateRequest();
|
|
|
+ request.setBizModel(model);
|
|
|
+ AlipayFundExpandindirectCreateResponse response =
|
|
|
+ alipayClientFactory.getClient(enterpriseId).execute(request);
|
|
|
+ if (!response.isSuccess())
|
|
|
+ throw new BusinessException(400, "创建进件单失败: " + response.getMsg());
|
|
|
+
|
|
|
+ var accounts = accountMapper.selectList(
|
|
|
+ new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<AccountEntity>()
|
|
|
+ .eq(AccountEntity::getEnterpriseId, enterpriseId));
|
|
|
+ for (AccountEntity acc : accounts) {
|
|
|
+ acc.setOnboardOutBizNo(outBizNo);
|
|
|
+ acc.setOnboardOrderId(response.getOrderId());
|
|
|
+ acc.setOnboardStatus("PENDING");
|
|
|
+ accountMapper.updateById(acc);
|
|
|
+ }
|
|
|
+ return Map.of("order_id", response.getOrderId() != null ? response.getOrderId() : "",
|
|
|
+ "out_biz_no", outBizNo, "status", "PENDING");
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ throw new BusinessException(400, "创建进件单失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** alipay.fund.expandindirect.order.query — 查询进件状态 */
|
|
|
+ public Map<String, String> queryOnboard(String enterpriseId, String orderId) {
|
|
|
+ try {
|
|
|
+ AlipayFundExpandindirectOrderQueryModel model = new AlipayFundExpandindirectOrderQueryModel();
|
|
|
+ model.setProductCode(ONBOARD_PRODUCT_CODE);
|
|
|
+ model.setBizScene(ONBOARD_BIZ_SCENE);
|
|
|
+ model.setOrderId(orderId);
|
|
|
+ AlipayFundExpandindirectOrderQueryRequest request = new AlipayFundExpandindirectOrderQueryRequest();
|
|
|
+ request.setBizModel(model);
|
|
|
+ AlipayFundExpandindirectOrderQueryResponse response =
|
|
|
+ alipayClientFactory.getClient(enterpriseId).execute(request);
|
|
|
+ if (!response.isSuccess())
|
|
|
+ throw new BusinessException(400, "查询进件状态失败: " + response.getMsg());
|
|
|
+ return Map.of("order_id", orderId,
|
|
|
+ "status", response.getStatus() != null ? response.getStatus() : "PENDING");
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ throw new BusinessException(400, "查询进件状态失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /** alipay.fund.expandindirect.order.cancel — 取消进件单 */
|
|
|
+ public void cancelOnboard(String enterpriseId, String orderId) {
|
|
|
+ try {
|
|
|
+ AlipayFundExpandindirectOrderCancelModel model = new AlipayFundExpandindirectOrderCancelModel();
|
|
|
+ model.setProductCode(ONBOARD_PRODUCT_CODE);
|
|
|
+ model.setBizScene(ONBOARD_BIZ_SCENE);
|
|
|
+ model.setOrderId(orderId);
|
|
|
+ AlipayFundExpandindirectOrderCancelRequest request = new AlipayFundExpandindirectOrderCancelRequest();
|
|
|
+ request.setBizModel(model);
|
|
|
+ AlipayFundExpandindirectOrderCancelResponse response =
|
|
|
+ alipayClientFactory.getClient(enterpriseId).execute(request);
|
|
|
+ if (!response.isSuccess())
|
|
|
+ throw new BusinessException(400, "取消进件单失败: " + response.getMsg());
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ throw new BusinessException(400, "取消进件单失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // ==================== 3. 开通记账本 ====================
|
|
|
|
|
|
/**
|
|
|
* alipay.fund.accountbook.create
|