|
|
@@ -4,23 +4,22 @@ import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
import com.alipay.api.AlipayApiException;
|
|
|
import com.alipay.api.AlipayClient;
|
|
|
import com.alipay.api.AlipayRequest;
|
|
|
-import com.alipay.api.domain.AlipayTradePagePayModel;
|
|
|
-import com.alipay.api.domain.AlipayTradeRefundModel;
|
|
|
-import com.alipay.api.domain.AlipayTradeWapPayModel;
|
|
|
+import com.alipay.api.AlipayResponse;
|
|
|
+import com.alipay.api.domain.*;
|
|
|
import com.alipay.api.internal.util.AlipaySignature;
|
|
|
-import com.alipay.api.request.AlipayTradePagePayRequest;
|
|
|
-import com.alipay.api.request.AlipayTradeRefundRequest;
|
|
|
-import com.alipay.api.request.AlipayTradeWapPayRequest;
|
|
|
+import com.alipay.api.request.*;
|
|
|
+import com.alipay.api.response.AlipayFundTransCommonQueryResponse;
|
|
|
import com.alipay.api.response.AlipayTradeRefundResponse;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.cyksj.common.AliPayCommon;
|
|
|
import com.cyksj.common.EnvCommonService;
|
|
|
import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.constant.TaskTypeEnum;
|
|
|
+import com.cyksj.common.constant.TransferConstant;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
import com.cyksj.common.snowflake.Sequence;
|
|
|
import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
|
@@ -28,6 +27,7 @@ import com.cyksj.common.util.Codec;
|
|
|
import com.cyksj.common.util.Jsons;
|
|
|
import com.cyksj.common.util.Xmls;
|
|
|
import com.cyksj.config.WeChatConfig;
|
|
|
+import com.cyksj.config.zfb.AliPayClientFactory;
|
|
|
import com.cyksj.config.zfb.BaseZfbConfig;
|
|
|
import com.cyksj.config.zfb.ZfbProductCode;
|
|
|
import com.cyksj.dto.RedisKey;
|
|
|
@@ -45,13 +45,11 @@ import com.cyksj.mapper.market.task.TaskTypeMapper;
|
|
|
import com.cyksj.model.dto.AliPayParams;
|
|
|
import com.cyksj.model.dto.CouponPopularizeDto;
|
|
|
import com.cyksj.model.dto.H5JsPayParams;
|
|
|
+import com.cyksj.model.entity.Address;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.manage.views.AccountView;
|
|
|
import com.cyksj.model.manage.views.OrderDonView;
|
|
|
-import com.cyksj.model.request.OrderAttach;
|
|
|
-import com.cyksj.model.request.OrderPayRequest;
|
|
|
-import com.cyksj.model.request.WxOrderRefundReq;
|
|
|
-import com.cyksj.model.request.ZfbOrderRefundReq;
|
|
|
+import com.cyksj.model.request.*;
|
|
|
import com.cyksj.model.response.AliPayRefundRep;
|
|
|
import com.cyksj.model.views.CouponNewUserView;
|
|
|
import com.cyksj.model.views.CouponUserView;
|
|
|
@@ -184,6 +182,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
private final GroupRelationFrontService groupRelationFrontService;
|
|
|
|
|
|
+ private final TransferAccountsRecordMapper transferAccountsRecordMapper;
|
|
|
+
|
|
|
private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
|
|
|
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
@@ -891,7 +891,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setShopId(null);
|
|
|
}
|
|
|
//支付宝退款
|
|
|
- AlipayClient alipayClient = AliPayCommon.getAlipayClient(shopConfigMapper.getByAppId(Optional.ofNullable(orderDon.getShopId()).orElse(ShopConfig.ZFB_DEFAULT_APP_ID)));
|
|
|
+ AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(Optional.ofNullable(orderDon.getShopId()).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
|
|
|
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
|
|
|
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
|
|
|
//支付宝交易号
|
|
|
@@ -1194,10 +1194,74 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDonTransportMapper.insert(transport);
|
|
|
}
|
|
|
|
|
|
- public AliPayParams commonAliPay(Long orderId, String returnUrl, String productCode, String appId, String qrPayMode) throws Exception {
|
|
|
- ShopConfig shopConfig = shopConfigMapper.getByAppId(Optional.ofNullable(appId).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
|
|
|
+ @Override
|
|
|
+ public AlipayResponse transferAccounts(TransferAccountsReq transferAccountsReq) throws Exception {
|
|
|
+ Long userId = transferAccountsReq.getUserId();
|
|
|
+ String account = transferAccountsReq.getAccount();
|
|
|
+ String name = transferAccountsReq.getName();
|
|
|
+ BigDecimal money = transferAccountsReq.getMoney();
|
|
|
+ String type = transferAccountsReq.getType();
|
|
|
+ BigDecimal points = transferAccountsReq.getPoints();
|
|
|
+ /* 生成商户转账订单号 */
|
|
|
+ String donNo = SEQUENCE.nextId().toString();
|
|
|
+ if (StrUtil.isEmpty(type)) {
|
|
|
+ type = TransferConstant.ALIPAY;
|
|
|
+ }
|
|
|
+ Integer scope = transferAccountsReq.getScope();
|
|
|
+ AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(ShopConfig.DISTRIBUTE_ZFB_DEFAULT_APP_ID);
|
|
|
+
|
|
|
+ AlipayRequest alipayRequest = aliPayTransferAccountsRequest(donNo, account, name, money);
|
|
|
|
|
|
- AlipayClient alipayClient = AliPayCommon.getAlipayClient(shopConfig);
|
|
|
+ AlipayResponse response = alipayClient.certificateExecute(alipayRequest);
|
|
|
+ if (response.isSuccess()) {
|
|
|
+ log.info("支付宝转账金额:{}至用户:{}成功", money.divide(BigDecimal.valueOf(100)), userId);
|
|
|
+ saveTransferRecord(userId, donNo, account, name, money, points, type, scope, response.getBody(), null);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ log.info("支付宝转账金额:{}至用户:{}失败", money.divide(BigDecimal.valueOf(100)), userId);
|
|
|
+ saveTransferRecord(userId, donNo, account, name, money, points, type, scope, response.getBody(), response.getSubMsg());
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AlipayFundTransCommonQueryResponse getTransFerStatusByTid(String translationId) throws Exception {
|
|
|
+ AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(ShopConfig.ZFB_DEFAULT_APP_ID);
|
|
|
+ AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest();
|
|
|
+ AlipayFundTransCommonQueryModel model = new AlipayFundTransCommonQueryModel();
|
|
|
+ model.setOrderId(translationId);
|
|
|
+ model.setBizScene(TransferConstant.DIRECT_TRANSFER);
|
|
|
+ model.setProductCode(ZfbProductCode.STD_RED_PACKET.getProductCode());
|
|
|
+ request.setBizModel(model);
|
|
|
+ AlipayFundTransCommonQueryResponse response = alipayClient.certificateExecute(request);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ private AlipayRequest aliPayTransferAccountsRequest(String donNo, String account, String name, BigDecimal money) {
|
|
|
+ //支付宝转账
|
|
|
+ AlipayFundTransUniTransferRequest transUniTransferRequest = new AlipayFundTransUniTransferRequest();
|
|
|
+ //转账参数
|
|
|
+ AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
|
|
+ model.setOutBizNo(donNo);
|
|
|
+ //单位元
|
|
|
+ model.setTransAmount(money.divide(BigDecimal.valueOf(100)).toString());
|
|
|
+ model.setProductCode(ZfbProductCode.STD_RED_PACKET.getProductCode());
|
|
|
+ model.setBizScene(TransferConstant.DIRECT_TRANSFER);
|
|
|
+ model.setOrderTitle("分销提现");
|
|
|
+ //红包业务必传,取值REDPACKET
|
|
|
+ JSONObject businessParams = new JSONObject();
|
|
|
+ businessParams.putOpt(TransferConstant.SUB_BIZ_SCENE, TransferConstant.RED_PACKET);
|
|
|
+ model.setBusinessParams(businessParams.toString());
|
|
|
+ Participant payeeInfo = new Participant();
|
|
|
+ payeeInfo.setIdentity(account);
|
|
|
+ payeeInfo.setIdentityType(TransferConstant.ALIPAY_LOGON_ID);
|
|
|
+ payeeInfo.setName(name);
|
|
|
+ model.setPayeeInfo(payeeInfo);
|
|
|
+ transUniTransferRequest.setBizModel(model);
|
|
|
+ return transUniTransferRequest;
|
|
|
+ }
|
|
|
+
|
|
|
+ public AliPayParams commonAliPay(Long orderId, String returnUrl, String String productCode, String appId, String qrPayMode) throws Exception {
|
|
|
+ AlipayClient alipayClient = AliPayClientFactory.getAlipayClient(Optional.ofNullable(appId).orElse(ShopConfig.ZFB_DEFAULT_APP_ID));
|
|
|
// 创建API对应的request
|
|
|
AlipayRequest alipayRequest = getAliAayRequest(orderId, productCode, qrPayMode);
|
|
|
if (alipayRequest == null) {
|
|
|
@@ -1650,4 +1714,30 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存转账记录
|
|
|
+ */
|
|
|
+ public void saveTransferRecord(Long userId, String donNo, String account, String name, BigDecimal money, BigDecimal points, String type, Integer scope, String body, String error) throws Exception {
|
|
|
+ TransferAccountsRecord record = new TransferAccountsRecord();
|
|
|
+ JSONObject re = Jsons.parseObject(body, JSONObject.class);
|
|
|
+ JSONObject response = Jsons.parseObject(re.get("alipay_fund_trans_uni_transfer_response"), JSONObject.class);
|
|
|
+ String transactionId = response.getStr("order_id");
|
|
|
+ String transDate = response.getStr("trans_date");
|
|
|
+ record.setUserId(userId);
|
|
|
+ record.setAccount(account);
|
|
|
+ record.setName(name);
|
|
|
+ record.setMoney(money);
|
|
|
+ record.setType(type);
|
|
|
+ record.setScope(scope);
|
|
|
+ Optional.ofNullable(error).ifPresent(msg -> {
|
|
|
+ record.setErrorMsg(msg);
|
|
|
+ record.setStatus(0);
|
|
|
+ });
|
|
|
+ record.setPoints(points);
|
|
|
+ record.setTransferOutNo(donNo);
|
|
|
+ record.setTransactionId(transactionId);
|
|
|
+ Optional.ofNullable(transDate).ifPresent(transferTime -> record.setTransferTime(DateTime.of(transferTime, "yyyy-MM-dd HH:mm:ss")));
|
|
|
+ transferAccountsRecordMapper.insert(record);
|
|
|
+ }
|
|
|
}
|