|
@@ -2775,6 +2775,8 @@ class OrderController extends BaseController
|
|
|
}
|
|
}
|
|
|
$get = Yii::$app->request->get();
|
|
$get = Yii::$app->request->get();
|
|
|
$cashier = $get['cashier'] ?? 0;
|
|
$cashier = $get['cashier'] ?? 0;
|
|
|
|
|
+ //是否强制取消订单 0不要强制 1强制,没有关单成功也要取消
|
|
|
|
|
+ $forceCancel = $get['forceCancel'] ?? 0;
|
|
|
$id = $get['id'] ?? 0;
|
|
$id = $get['id'] ?? 0;
|
|
|
$order = OrderClass::getById($id, true);
|
|
$order = OrderClass::getById($id, true);
|
|
|
OrderClass::valid($order, $this->shopId);
|
|
OrderClass::valid($order, $this->shopId);
|
|
@@ -2803,12 +2805,34 @@ class OrderController extends BaseController
|
|
|
'lklCertificatePath' => $lklCertificatePath,
|
|
'lklCertificatePath' => $lklCertificatePath,
|
|
|
];
|
|
];
|
|
|
$laResource = new Lakala($params);
|
|
$laResource = new Lakala($params);
|
|
|
- $closeParams = ['orderSn' => $orderSn];
|
|
|
|
|
- //关闭拉卡拉聚合支付订单
|
|
|
|
|
- $response = $laResource->close($closeParams);
|
|
|
|
|
- if (!isset($response['code']) || $response['code'] != 'BBS00000') {
|
|
|
|
|
- $msg = $response['msg'] ?? '未知错误';
|
|
|
|
|
- noticeUtil::push("拉卡拉聚合支付关单失败:{$orderSn},原因:{$msg} 编号:".$response['code'], '15280215347');
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 先查询拉卡拉侧订单状态
|
|
|
|
|
+ $queryResponse = $laResource->query(['orderSn' => $orderSn]);
|
|
|
|
|
+ //响应CODE为BBS00000,仅表示查到了这笔交易。交易本身的成功与否状态,要查看响应报文中的trade_state这个值
|
|
|
|
|
+ if (isset($queryResponse['code']) && $queryResponse['code'] == 'BBS00000') {
|
|
|
|
|
+ $tradeState = $queryResponse['resp_data']['trade_state'] ?? '';
|
|
|
|
|
+
|
|
|
|
|
+ // 订单已支付,拦截取消操作
|
|
|
|
|
+ if ($tradeState == 'SUCCESS') {
|
|
|
|
|
+ util::fail('已付款,不能取消');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 根据拉卡拉聚合支付文档(id=116)及实际情况,判断是否为非终态
|
|
|
|
|
+ // INIT:初始化, CREATE:下单成功, DEAL:交易处理中, USERPAYING:支付中, NOTPAY:未支付
|
|
|
|
|
+ $pendingStates = ['INIT', 'CREATE', 'DEAL', 'USERPAYING', 'NOTPAY'];
|
|
|
|
|
+ if (in_array($tradeState, $pendingStates)) {
|
|
|
|
|
+ $closeParams = ['orderSn' => $orderSn];
|
|
|
|
|
+ $closeResponse = $laResource->close($closeParams);
|
|
|
|
|
+ if (!isset($closeResponse['code']) || $closeResponse['code'] != 'BBS00000') {
|
|
|
|
|
+ $msg = $closeResponse['msg'] ?? '关闭失败';
|
|
|
|
|
+ noticeUtil::push("拉卡拉聚合支付关单失败:{$orderSn},原因:{$msg} 原单状态:{$tradeState}", '15280215347');
|
|
|
|
|
+ if ($forceCancel == 0) {
|
|
|
|
|
+ //返回禁止关单
|
|
|
|
|
+ util::success(['returnStatus' => 'FORBID']);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果状态是 CLOSED 或 CANCELED,则视为已关单,直接继续本地流程
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
OrderService::expire($order);
|
|
OrderService::expire($order);
|