|
@@ -123,7 +123,7 @@ public class OmgPayController extends BaseController {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 发起 OMG AIO 幕前支付。校验订单归属/未支付/金额 → 查门店启用凭证 → 生成 MerchantTradeNo →
|
|
* 发起 OMG AIO 幕前支付。校验订单归属/未支付/金额 → 查门店启用凭证 → 生成 MerchantTradeNo →
|
|
|
- * 组参 + CheckMacValue → 落流水(pay_status=0) + 更新订单 payType=7/payUrl → 返回 form 字段供前端 Form Post。
|
|
|
|
|
|
|
+ * 组参 + CheckMacValue → 落流水(pay_status=0) + 更新订单 payType=PAY_TYPE_OMG/payUrl → 返回 form 字段供前端 Form Post。
|
|
|
*/
|
|
*/
|
|
|
@Anonymous
|
|
@Anonymous
|
|
|
@Auth
|
|
@Auth
|
|
@@ -135,11 +135,20 @@ public class OmgPayController extends BaseController {
|
|
|
if (invalidOrderRequest(request)) {
|
|
if (invalidOrderRequest(request)) {
|
|
|
return error(MessageUtils.message("no.order.id.error"));
|
|
return error(MessageUtils.message("no.order.id.error"));
|
|
|
}
|
|
}
|
|
|
|
|
+ // 按 ddId 串行化发起(T058 防堆积):同一订单并发 create 在分布式锁内排队,锁释放在事务提交后,
|
|
|
|
|
+ // 保证后一个请求能看到前一个已提交的活跃流水 → 命中复用而非新建(详见 PaymentCreateGuardService)。
|
|
|
return paymentCreateGuardService == null ? createUnderLock(token, request)
|
|
return paymentCreateGuardService == null ? createUnderLock(token, request)
|
|
|
: paymentCreateGuardService.withLock(request.getOrderid(),
|
|
: paymentCreateGuardService.withLock(request.getOrderid(),
|
|
|
() -> createUnderLock(token, request));
|
|
() -> createUnderLock(token, request));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 发起支付的实际业务逻辑,在 {@link #create} 的 {@code @Transactional} 与 {@link PaymentCreateGuardService}
|
|
|
|
|
+ * 分布式锁内执行。锁释放在事务 afterCommit,确保并发请求看不到未提交的活跃流水 INSERT,避免重复活跃行。
|
|
|
|
|
+ *
|
|
|
|
|
+ * <p>流程:校验登录/订单归属/未支付/金额/门店 → 查门店 OMG 凭证 → 复用或新建 MerchantTradeNo →
|
|
|
|
|
+ * 组 AIO 参 + CheckMacValue → 落流水(pay_status=0) + 更新订单 payType/payUrl → 返回 form 字段。
|
|
|
|
|
+ */
|
|
|
private AjaxResult createUnderLock(String token, OmgOrderRequest request) {
|
|
private AjaxResult createUnderLock(String token, OmgOrderRequest request) {
|
|
|
if (invalidOrderRequest(request)) {
|
|
if (invalidOrderRequest(request)) {
|
|
|
return error(MessageUtils.message("no.order.id.error"));
|
|
return error(MessageUtils.message("no.order.id.error"));
|
|
@@ -213,7 +222,7 @@ public class OmgPayController extends BaseController {
|
|
|
// 组参 + CheckMacValue,返回含 gatewayUrl 的 form 字段
|
|
// 组参 + CheckMacValue,返回含 gatewayUrl 的 form 字段
|
|
|
Map<String, String> form = omgPay.createAioForm(baseUrl, cfg, params);
|
|
Map<String, String> form = omgPay.createAioForm(baseUrl, cfg, params);
|
|
|
|
|
|
|
|
- // 更新订单 payType=7 / payUrl=gatewayUrl(仅更这两个字段)
|
|
|
|
|
|
|
+ // 更新订单 payType=OMG(PAY_TYPE_OMG) / payUrl=gatewayUrl(仅更这两个字段)
|
|
|
PosOrder upd = new PosOrder();
|
|
PosOrder upd = new PosOrder();
|
|
|
upd.setId(order.getId());
|
|
upd.setId(order.getId());
|
|
|
upd.setPayType(PAY_TYPE_OMG);
|
|
upd.setPayType(PAY_TYPE_OMG);
|