|
@@ -11,14 +11,9 @@ import com.caimei365.order.model.ResponseJson;
|
|
|
import com.caimei365.order.model.bo.PayParamBo;
|
|
|
import com.caimei365.order.model.dto.PayDto;
|
|
|
import com.caimei365.order.model.dto.PayLinkDto;
|
|
|
-import com.caimei365.order.model.po.BalanceRecordPo;
|
|
|
-import com.caimei365.order.model.po.DiscernReceiptPo;
|
|
|
-import com.caimei365.order.model.po.OrderReceiptRelationPo;
|
|
|
-import com.caimei365.order.model.po.UserBeansHistoryPo;
|
|
|
-import com.caimei365.order.model.vo.DiscernReceiptVo;
|
|
|
-import com.caimei365.order.model.vo.OrderPayLinkVo;
|
|
|
-import com.caimei365.order.model.vo.OrderProductVo;
|
|
|
-import com.caimei365.order.model.vo.OrderVo;
|
|
|
+import com.caimei365.order.model.dto.SecondPayDto;
|
|
|
+import com.caimei365.order.model.po.*;
|
|
|
+import com.caimei365.order.model.vo.*;
|
|
|
import com.caimei365.order.service.PayOrderService;
|
|
|
import com.caimei365.order.service.RemoteCallService;
|
|
|
import com.caimei365.order.utils.CodeUtil;
|
|
@@ -36,6 +31,7 @@ import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
import java.security.spec.InvalidKeySpecException;
|
|
|
import java.text.SimpleDateFormat;
|
|
@@ -65,12 +61,14 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
private WeChatService weChatService;
|
|
|
@Resource
|
|
|
private RemoteCallService remoteCallService;
|
|
|
- @Value("${caimei.notifyUrl}")
|
|
|
- private String notifyUrl;
|
|
|
@Value("${caimei.redirectLink}")
|
|
|
private String redirectLink;
|
|
|
@Value("${caimei.linkPage}")
|
|
|
private String linkPage;
|
|
|
+ @Value("${caimei.notifyUrl}")
|
|
|
+ private String notifyUrl;
|
|
|
+ @Value("${caimei.secondHandUrl}")
|
|
|
+ private String secondHandUrl;
|
|
|
|
|
|
/**
|
|
|
* 订单支付前效验付款规则
|
|
@@ -390,6 +388,8 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
PayParamBo payParam = new PayParamBo();
|
|
|
// payDto -> payParam
|
|
|
BeanUtils.copyProperties(payDto, payParam);
|
|
|
+ // 微信线上支付
|
|
|
+ payParam.setPayWay("WEIXIN");
|
|
|
String openId = null;
|
|
|
if (null == payParam.getState()) {
|
|
|
// 小程序微信授权获取登录信息
|
|
@@ -421,7 +421,7 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
payParam.setOpenId(openId);
|
|
|
payParam.setNotifyUrl(notifyUrl);
|
|
|
log.info("【微信支付】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>获取openId:" + openId);
|
|
|
- return toPay(payParam, headers);
|
|
|
+ return toPayOrder(payParam, headers);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -444,7 +444,7 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
payParam.setPayType("ALIPAY_H5");
|
|
|
payParam.setNotifyUrl(notifyUrl);
|
|
|
log.info("【支付宝支付】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>orderId:" + payParam.getOrderId());
|
|
|
- return toPay(payParam, headers);
|
|
|
+ return toPayOrder(payParam, headers);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -469,13 +469,13 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
payParam.setPayType("GATEWAY_UNIONPAY");
|
|
|
payParam.setNotifyUrl(notifyUrl);
|
|
|
log.info("【银联支付】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>orderId:" + payParam.getOrderId());
|
|
|
- return toPay(payParam, headers);
|
|
|
+ return toPayOrder(payParam, headers);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 线上支付
|
|
|
+ * 订单线上支付
|
|
|
*/
|
|
|
- private ResponseJson<JSONObject> toPay(PayParamBo payParam, HttpHeaders headers) {
|
|
|
+ private ResponseJson<JSONObject> toPayOrder(PayParamBo payParam, HttpHeaders headers) {
|
|
|
// 订单信息
|
|
|
OrderVo order = payOrderMapper.getOrderByOrderId(payParam.getOrderId());
|
|
|
if (null == order) {
|
|
@@ -856,4 +856,349 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
}
|
|
|
return ResponseJson.success(result);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二手发布微信线上支付
|
|
|
+ *
|
|
|
+ * @param secondPayDto {
|
|
|
+ * productId 二手发布商品id
|
|
|
+ * returnUrl 页面回调地址
|
|
|
+ * code 微信小程序code
|
|
|
+ * state 微信公众号state参数
|
|
|
+ * }
|
|
|
+ * @param headers
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<JSONObject> paySecondByWeChat(SecondPayDto secondPayDto, HttpHeaders headers) {
|
|
|
+ PayParamBo payParam = new PayParamBo();
|
|
|
+ // payDto -> payParam
|
|
|
+ BeanUtils.copyProperties(secondPayDto, payParam);
|
|
|
+ // 微信线上支付
|
|
|
+ payParam.setPayWay("WEIXIN");
|
|
|
+ String openId = null;
|
|
|
+ if (null == payParam.getState()) {
|
|
|
+ // 小程序微信授权获取登录信息
|
|
|
+ ResponseJson<Map<String, Object>> appletsInfo = weChatService.getInfoMapByApplets(payParam.getCode(), headers, 1);
|
|
|
+ if (appletsInfo.getCode() == -1) {
|
|
|
+ return ResponseJson.error(appletsInfo.getMsg(), null);
|
|
|
+ }
|
|
|
+ Map<String, Object> infoData = appletsInfo.getData();
|
|
|
+ openId = (String) infoData.get(WeChatService.Keys.OPEN_ID);
|
|
|
+ if (StringUtils.isEmpty(openId)) {
|
|
|
+ return ResponseJson.error("微信小程序获取openId失败!", null);
|
|
|
+ }
|
|
|
+ //小程序微信快捷支付
|
|
|
+ payParam.setPayType("MINIAPP_WEIXIN");
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ // 微信公众号,通过code获取微信用户信息
|
|
|
+ Map<String, Object> map = weChatService.getInfoMapByWeb(payParam.getCode(), "crm");
|
|
|
+ openId = (String) map.get(WeChatService.Keys.OPEN_ID);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("try-catch:",e);
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(openId)) {
|
|
|
+ return ResponseJson.error("微信公众号获取openId失败!", null);
|
|
|
+ }
|
|
|
+ //pc微信扫码支付,微信公众号支付
|
|
|
+ payParam.setPayType("JSAPI_WEIXIN");
|
|
|
+ }
|
|
|
+ payParam.setOpenId(openId);
|
|
|
+ // 二手发布默认100元
|
|
|
+ payParam.setPayAmount(10000);
|
|
|
+ payParam.setNotifyUrl(secondHandUrl);
|
|
|
+ log.info("【二手发布微信支付】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>获取openId:" + openId);
|
|
|
+ return toPaySecond(payParam, headers);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二手发布支付宝线上支付
|
|
|
+ *
|
|
|
+ * @param secondPayDto {
|
|
|
+ * productId 二手发布商品id
|
|
|
+ * returnUrl 页面回调地址
|
|
|
+ * }
|
|
|
+ * @param headers
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<JSONObject> paySecondByAlipay(SecondPayDto secondPayDto, HttpHeaders headers) {
|
|
|
+ PayParamBo payParam = new PayParamBo();
|
|
|
+ // payDto -> payParam
|
|
|
+ BeanUtils.copyProperties(secondPayDto, payParam);
|
|
|
+ //支付宝支付
|
|
|
+ payParam.setPayWay("ALIPAY");
|
|
|
+ payParam.setPayType("ALIPAY_H5");
|
|
|
+ // 二手发布默认100元
|
|
|
+ payParam.setPayAmount(10000);
|
|
|
+ payParam.setNotifyUrl(secondHandUrl);
|
|
|
+ log.info("【二手发布支付宝支付】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>productId:" + payParam.getProductId());
|
|
|
+ return toPaySecond(payParam, headers);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二手发布银联线上支付
|
|
|
+ *
|
|
|
+ * @param secondPayDto {
|
|
|
+ * productId 二手发布商品id
|
|
|
+ * returnUrl 页面回调地址
|
|
|
+ * bankCode 银行编码(银联支付使用)
|
|
|
+ * userType 用户类型(银联支付使用)企业:ENTERPRISE,个人:USER
|
|
|
+ * }
|
|
|
+ * @param headers
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<JSONObject> paySecondByUnionPay(SecondPayDto secondPayDto, HttpHeaders headers) {
|
|
|
+ PayParamBo payParam = new PayParamBo();
|
|
|
+ // payDto -> payParam
|
|
|
+ BeanUtils.copyProperties(secondPayDto, payParam);
|
|
|
+ //支付宝支付
|
|
|
+ payParam.setPayWay("UNIONPAY");
|
|
|
+ payParam.setPayType("GATEWAY_UNIONPAY");
|
|
|
+ // 二手发布默认100元
|
|
|
+ payParam.setPayAmount(10000);
|
|
|
+ payParam.setNotifyUrl(secondHandUrl);
|
|
|
+ log.info("【二手发布银联支付】>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>productId:" + payParam.getProductId());
|
|
|
+ return toPaySecond(payParam, headers);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二手发布支付
|
|
|
+ */
|
|
|
+ private ResponseJson<JSONObject> toPaySecond(PayParamBo payParam, HttpHeaders headers) {
|
|
|
+ // 定义支付请求结果
|
|
|
+ JSONObject result = null;
|
|
|
+ try {
|
|
|
+ // 时间戳
|
|
|
+ long time = System.currentTimeMillis() / 1000;
|
|
|
+ // 用户IP地址
|
|
|
+ String userIp = headers.getFirst("X-CLIENT-IP");
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
+ json.put("merAccount", PayUtil.merAccount);
|
|
|
+ json.put("merNo", PayUtil.merNo);
|
|
|
+ json.put("time", time);
|
|
|
+ //支付金额
|
|
|
+ json.put("amount", payParam.getPayAmount());
|
|
|
+ json.put("payWay", payParam.getPayWay());
|
|
|
+ json.put("payType", payParam.getPayType());
|
|
|
+ json.put("userIp", userIp);
|
|
|
+ json.put("returnUrl", payParam.getReturnUrl());
|
|
|
+ json.put("notifyUrl", payParam.getNotifyUrl());
|
|
|
+ if (StringUtils.isNotBlank(payParam.getBankCode())) {
|
|
|
+ json.put("bankCode", payParam.getBankCode());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(payParam.getUserType())) {
|
|
|
+ json.put("userType", payParam.getUserType());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(payParam.getOpenId())) {
|
|
|
+ json.put("openId", payParam.getOpenId());
|
|
|
+ }
|
|
|
+ String environment = "";
|
|
|
+ if (payParam.getNotifyUrl().contains("8008")) {
|
|
|
+ environment = "DEV";
|
|
|
+ } else if (payParam.getNotifyUrl().contains("spi-b")) {
|
|
|
+ environment = "BETA";
|
|
|
+ }
|
|
|
+ // 商户订单号
|
|
|
+ String orderId = payParam.getProductId() + "T" + time + environment;
|
|
|
+ json.put("orderId", orderId);
|
|
|
+ //商品名称
|
|
|
+ String product = "采美订单" + payParam.getProductId();
|
|
|
+ json.put("product", product);
|
|
|
+ String attach = payParam.getProductId() + "," + payParam.getPayType();
|
|
|
+ json.put("attach", attach);
|
|
|
+ String sign = PayUtil.getPaySign(json, PayUtil.merKey);
|
|
|
+ json.put("sign", sign);
|
|
|
+ // 二手发布默认100元,默认私账
|
|
|
+ List<Map<String, String>> list = new ArrayList<>();
|
|
|
+ Map<String, String> map = new HashMap<>(3);
|
|
|
+ map.put("subUserNo", PayUtil.privateAccountNo);
|
|
|
+ map.put("splitBillType", "1");
|
|
|
+ map.put("splitBillValue", "1");
|
|
|
+ list.add(map);
|
|
|
+ String splitBillDetail = JSONObject.toJSONString(list);
|
|
|
+ json.put("splitBillDetail", splitBillDetail);
|
|
|
+ // 私钥加密
|
|
|
+ String data = RSAUtil.privateEncrypt(json.toJSONString(), PayUtil.merKey);
|
|
|
+ // 提交
|
|
|
+ result = PayUtil.httpGet("https://platform.mhxxkj.com/paygateway/mbpay/order/v1", PayUtil.merAccount, data);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("错误信息", e);
|
|
|
+ return ResponseJson.error("支付失败!", null);
|
|
|
+ }
|
|
|
+ String code = result.getString("code");
|
|
|
+ if (!"000000".equals(code)) {
|
|
|
+ String msg = result.getString("msg");
|
|
|
+ log.info("第三方支付失败>>>>>>>msg:" + msg);
|
|
|
+ return ResponseJson.error(msg, null);
|
|
|
+ }
|
|
|
+ // 保存二手发布分账参数
|
|
|
+ SplitAccountPo splitAccount = new SplitAccountPo();
|
|
|
+ splitAccount.setOrderId(payParam.getOrderId());
|
|
|
+ splitAccount.setProductId(payParam.getProductId());
|
|
|
+ // 二手交易供应商
|
|
|
+ splitAccount.setShopId(1252);
|
|
|
+ splitAccount.setProductType(4);
|
|
|
+ splitAccount.setType(2);
|
|
|
+ if ("UNIONPAY".equals(payParam.getPayWay())) {
|
|
|
+ splitAccount.setSplitAccount(92.00);
|
|
|
+ } else {
|
|
|
+ splitAccount.setSplitAccount(99.62);
|
|
|
+ }
|
|
|
+ JSONObject data = result.getJSONObject("data");
|
|
|
+ splitAccount.setMbOrderId(data.getString("mbOrderId"));
|
|
|
+ splitAccount.setOrderRequestNo(data.getString("orderId"));
|
|
|
+ splitAccount.setPayStatus(0);
|
|
|
+ // 保存分账详情
|
|
|
+ payOrderMapper.insertSplitAccount(splitAccount);
|
|
|
+
|
|
|
+ return ResponseJson.success(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二手发布支付回调
|
|
|
+ *
|
|
|
+ * @param data
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String paymentSecondCallback(String data) throws NoSuchAlgorithmException, InvalidKeySpecException {
|
|
|
+ log.info("******************** 二手发布支付异步回调 start *******************");
|
|
|
+ // 公钥解密
|
|
|
+ JSONObject json = PayUtil.publicKeyDecrypt(data, PayUtil.publicKey);
|
|
|
+ log.info("公钥解密>>>>>>" + json);
|
|
|
+ // 公钥验签
|
|
|
+ String signaa = json.getString("sign");
|
|
|
+ json.remove("sign");
|
|
|
+ String signbb = PayUtil.getPaySign(json, PayUtil.publicKey);
|
|
|
+ if (!signaa.equals(signbb)) {
|
|
|
+ return "验签失败";
|
|
|
+ }
|
|
|
+ // 订单状态
|
|
|
+ String orderStatus = json.getString("orderStatus");
|
|
|
+ // 平台唯一流水号
|
|
|
+ String mbOrderId = json.getString("mbOrderId");
|
|
|
+ // 附加数据,下单时若有传输则原样返回,下单时为空,则不返回该数据
|
|
|
+ String attach = json.getString("attach");
|
|
|
+ // 订单金额,以元为单位
|
|
|
+ BigDecimal amount = json.getBigDecimal("amount");
|
|
|
+ log.info("订单状态>>>>>>" + orderStatus);
|
|
|
+ if ("FAILED".equals(orderStatus)) {
|
|
|
+ return "支付失败";
|
|
|
+ }
|
|
|
+ String[] split = attach.split(",");
|
|
|
+ // 订单id
|
|
|
+ Integer productId = Integer.valueOf(split[0]);
|
|
|
+ // 支付类型
|
|
|
+ String payType = split[1];
|
|
|
+ double payAmount = amount.doubleValue();
|
|
|
+ String payFormData = json.toJSONString();
|
|
|
+ payOrderMapper.updateSeconHandDetail(productId, payType, payAmount, payFormData);
|
|
|
+ //修改分账付款状态
|
|
|
+ payOrderMapper.updateSplitAccountByPay(mbOrderId);
|
|
|
+ return "SUCCESS";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 延时分账异步通知回调
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String delayedSplittingCallback(String data) {
|
|
|
+ try {
|
|
|
+ log.info("******************** 延时分账异步通知回调 start *******************");
|
|
|
+ // 公钥解密
|
|
|
+ JSONObject json = PayUtil.publicKeyDecrypt(data, PayUtil.publicKey);
|
|
|
+ log.info("公钥解密>>>>>>" + json);
|
|
|
+ // 公钥验签
|
|
|
+ String signaa = json.getString("sign");
|
|
|
+ json.remove("sign");
|
|
|
+ String signbb = PayUtil.getPaySign(json, PayUtil.publicKey);
|
|
|
+ if (!signaa.equals(signbb)) {
|
|
|
+ return "验签失败";
|
|
|
+ }
|
|
|
+ String mbOrderId = json.getString("mbOrderId");
|
|
|
+ String status = json.getString("status");
|
|
|
+ log.info("【延时分账回调】>>>>>>>>>>分账状态:" + status);
|
|
|
+ if ("FAILED".equals(status)) {
|
|
|
+ return "分账失败";
|
|
|
+ }
|
|
|
+ // 修改收款分账状态
|
|
|
+ payOrderMapper.updateBySplitStatus(mbOrderId);
|
|
|
+
|
|
|
+ List<SplitAccountPo> splitAccountList = payOrderMapper.getSplitAccountList(mbOrderId);
|
|
|
+ if (splitAccountList != null && splitAccountList.size() > 0) {
|
|
|
+ Integer orderId = splitAccountList.get(0).getOrderId();
|
|
|
+ List<ShopOrderVo> shopOrderList = payOrderMapper.getShopOrderListByOrderId(orderId);
|
|
|
+ Integer shopOrderId = null;
|
|
|
+ String shopOrderNo = "";
|
|
|
+ for (SplitAccountPo account : splitAccountList) {
|
|
|
+ log.info("【延时分账回调】>>>>>>>>>>保存应付付供应商:" + account.getShopId());
|
|
|
+ // 本次付供应商金额(分账金额)
|
|
|
+ Double splitAmount = account.getSplitAccount();
|
|
|
+ orderId = account.getOrderId();
|
|
|
+ Integer shopId = account.getShopId();
|
|
|
+ for (ShopOrderVo shopOrder : shopOrderList) {
|
|
|
+ if (shopId.equals(shopOrder.getShopId())) {
|
|
|
+ shopOrderId = shopOrder.getShopOrderId();
|
|
|
+ shopOrderNo = shopOrder.getShopOrderNo();
|
|
|
+ // 已付供应商金额
|
|
|
+ Double paidAmount = payOrderMapper.getPaidShopAmount(shopOrderId);
|
|
|
+ Double paidShop = MathUtil.add(paidAmount, splitAmount).doubleValue();
|
|
|
+ shopOrder.setPayedShopAmount(paidShop);
|
|
|
+ if (MathUtil.compare(shopOrder.getShouldPayShopAmount(), paidShop) == 0) {
|
|
|
+ shopOrder.setPayStatus(3);
|
|
|
+ } else {
|
|
|
+ shopOrder.setPayStatus(2);
|
|
|
+ }
|
|
|
+ // 修改子订单付款状态及付款金额
|
|
|
+ payOrderMapper.updateShopOrderByPayStatus(shopOrderId, paidShop, shopOrder.getPayStatus());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String currentTime = format.format(new Date());
|
|
|
+ // 保存付款单表
|
|
|
+ PayShopPo payShop = new PayShopPo();
|
|
|
+ payShop.setShopId(shopId);
|
|
|
+ payShop.setName("线上支付分账");
|
|
|
+ payShop.setTotalAmount(splitAmount);
|
|
|
+ payShop.setWipePayment(0d);
|
|
|
+ payShop.setPayType(6);
|
|
|
+ payShop.setStatus(1);
|
|
|
+ payShop.setDelFlag(0);
|
|
|
+ payShop.setApplyTime(currentTime);
|
|
|
+ payShop.setReviewTime(currentTime);
|
|
|
+ payShop.setPayTime(currentTime);
|
|
|
+ payOrderMapper.insertPayShop(payShop);
|
|
|
+ // 保存 付供应商记录
|
|
|
+ PayShopRecordPo shopRecord = new PayShopRecordPo();
|
|
|
+ shopRecord.setShopId(shopId);
|
|
|
+ shopRecord.setShopOrderId(shopOrderId);
|
|
|
+ shopRecord.setShopOrderNo(shopOrderNo);
|
|
|
+ shopRecord.setPayAmount(splitAmount);
|
|
|
+ shopRecord.setWipePayment(0d);
|
|
|
+ shopRecord.setPayType(6);
|
|
|
+ shopRecord.setPayTime(currentTime);
|
|
|
+ shopRecord.setPayShopId(payShop.getId());
|
|
|
+ shopRecord.setStatus(1);
|
|
|
+ shopRecord.setDelFlag(0);
|
|
|
+ payOrderMapper.insertPayShopRecord(shopRecord);
|
|
|
+ }
|
|
|
+ //子订单是否全部付款
|
|
|
+ boolean isPay = true;
|
|
|
+ for (ShopOrderVo shopOrder : shopOrderList) {
|
|
|
+ if (3 != shopOrder.getPayStatus()) {
|
|
|
+ isPay = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 修改主订单付款状态
|
|
|
+ if (isPay) {
|
|
|
+ payOrderMapper.updateOrderByPayStatus(orderId, 3);
|
|
|
+ } else {
|
|
|
+ payOrderMapper.updateOrderByPayStatus(orderId, 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("【延时分账回调】>>>>>>>>>>分账异步通知异常", e);
|
|
|
+ return "分账失败";
|
|
|
+ }
|
|
|
+ return "SUCCESS";
|
|
|
+ }
|
|
|
}
|