|
|
@@ -614,10 +614,11 @@ class OrderController extends BaseController
|
|
|
OrderClass::valid($order, $this->shopId);
|
|
|
if ($order->payStatus == 1) {
|
|
|
util::success(['returnStatus' => 'SUCCESS']);
|
|
|
- }else {
|
|
|
- util::success(['returnStatus' => 'unPay']);
|
|
|
}
|
|
|
- OrderClass::valid($order, $this->shopId);
|
|
|
+ if ($order->status == 5) {
|
|
|
+ util::success(['returnStatus' => 'CANCEL']);
|
|
|
+ }
|
|
|
+
|
|
|
$cgId = $order->purchaseId ?? 0;
|
|
|
$cg = PurchaseClass::getById($cgId, true);
|
|
|
$orderSn = $cg->orderSn ?? '';
|
|
|
@@ -690,8 +691,8 @@ class OrderController extends BaseController
|
|
|
$order = OrderClass::getById($saleId, true);
|
|
|
if (!empty($order)) {
|
|
|
|
|
|
- //解决扫码付重复打印问题
|
|
|
- $cacheKey = 'scan_pay_print_order_' . $orderSn;
|
|
|
+ //解决付款成功后重复通知打印问题
|
|
|
+ $cacheKey = 'pay_success_notice_' . $orderSn;
|
|
|
$has = Yii::$app->redis->executeCommand('GET', [$cacheKey]);
|
|
|
if (!empty($has)) {
|
|
|
return false;
|
|
|
@@ -746,9 +747,11 @@ class OrderController extends BaseController
|
|
|
OrderClass::valid($order, $this->shopId);
|
|
|
if ($order->payStatus == 1) {
|
|
|
util::success(['returnStatus' => 'SUCCESS']);
|
|
|
- } else {
|
|
|
- util::success(['returnStatus' => 'unPay']);
|
|
|
}
|
|
|
+ if ($order->status == 5) {
|
|
|
+ util::success(['returnStatus' => 'CANCEL']);
|
|
|
+ }
|
|
|
+
|
|
|
$cgId = $order->purchaseId ?? 0;
|
|
|
$cg = PurchaseClass::getById($cgId, true);
|
|
|
$orderSn = $cg->orderSn ?? '';
|
|
|
@@ -821,8 +824,8 @@ class OrderController extends BaseController
|
|
|
$order = OrderClass::getById($saleId, true);
|
|
|
if (!empty($order)) {
|
|
|
|
|
|
- //解决扫码付重复打印问题
|
|
|
- $cacheKey = 'scan_pay_print_order_' . $orderSn;
|
|
|
+ //解决付款成功后重复通知打印问题
|
|
|
+ $cacheKey = 'pay_success_notice_' . $orderSn;
|
|
|
$has = Yii::$app->redis->executeCommand('GET', [$cacheKey]);
|
|
|
if (!empty($has)) {
|
|
|
return false;
|
|
|
@@ -1023,8 +1026,8 @@ class OrderController extends BaseController
|
|
|
$order = OrderClass::getById($saleId, true);
|
|
|
if (!empty($order)) {
|
|
|
|
|
|
- //解决扫码付重复打印问题
|
|
|
- $cacheKey = 'scan_pay_print_order_' . $orderSn;
|
|
|
+ //解决付款成功后重复通知打印问题
|
|
|
+ $cacheKey = 'pay_success_notice_' . $orderSn;
|
|
|
$has = Yii::$app->redis->executeCommand('GET', [$cacheKey]);
|
|
|
if (!empty($has)) {
|
|
|
return false;
|
|
|
@@ -2752,19 +2755,88 @@ class OrderController extends BaseController
|
|
|
public function actionCancel()
|
|
|
{
|
|
|
$shopAdmin = $this->shopAdmin;
|
|
|
- if (isset($shopAdmin->super) == false || $shopAdmin->super != 1) {
|
|
|
+ if (!isset($shopAdmin->super) || $shopAdmin->super != 1) {
|
|
|
util::fail('超管才能取消订单');
|
|
|
}
|
|
|
- $id = Yii::$app->request->get('id');
|
|
|
- $order = OrderClass::getById($id, true);
|
|
|
+ //避免重复提交
|
|
|
+ $adminId = $this->adminId;
|
|
|
+ util::checkRepeatCommit($adminId, 3);
|
|
|
|
|
|
+ $get = Yii::$app->request->get();
|
|
|
+ $cashier = $get['cashier'] ?? 0;
|
|
|
+ //是否强制取消订单 0不要强制 1强制,没有关单成功也要取消
|
|
|
+ $forceCancel = $get['forceCancel'] ?? 0;
|
|
|
+ $id = $get['id'] ?? 0;
|
|
|
+ $order = OrderClass::getById($id, true);
|
|
|
+ OrderClass::valid($order, $this->shopId);
|
|
|
if ($order->orderType == 2) {
|
|
|
util::fail('客户下单,不能主动取消');
|
|
|
}
|
|
|
+ //如果收银台的订单,取消时要关闭拉卡拉的订单
|
|
|
+ if ($cashier == 1) {
|
|
|
+ //已取消,不需要再走下面的流程
|
|
|
+ if ($order->status == 5) {
|
|
|
+ util::complete('已取消');
|
|
|
+ }
|
|
|
+ $cgId = $order->purchaseId ?? 0;
|
|
|
+ $cg = PurchaseClass::getById($cgId, true);
|
|
|
+ $orderSn = $cg->orderSn ?? '';
|
|
|
|
|
|
- OrderClass::valid($order, $this->shopId);
|
|
|
- OrderService::expire($order, true);
|
|
|
- util::complete('已取消');
|
|
|
+ $shop = $this->shop;
|
|
|
+ $merchantPrivateKeyPath = Yii::getAlias("@vendor/lakala") . '/production/api_private_key.pem';
|
|
|
+ $lklCertificatePath = Yii::getAlias("@vendor/lakala") . '/production/lkl-apigw-v1.cer';
|
|
|
+ $params = [
|
|
|
+ 'appid' => 'OP00002119',
|
|
|
+ 'serial_no' => '018b08cfddbd',
|
|
|
+ 'merchant_no' => $shop->lklSjNo,
|
|
|
+ 'term_no' => $shop->lklScanTermNo,
|
|
|
+ 'merchantPrivateKeyPath' => $merchantPrivateKeyPath,
|
|
|
+ 'lklCertificatePath' => $lklCertificatePath,
|
|
|
+ ];
|
|
|
+ $laResource = new Lakala($params);
|
|
|
+
|
|
|
+ // 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::fail('取消失败,如必要请强制取消');
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ noticeUtil::push("关单成功,订单号:{$orderSn} 原单状态:{$tradeState}", '15280215347');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果状态是 CLOSED 或 CANCELED,则视为已关单,直接继续本地流程
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $connection = Yii::$app->db;
|
|
|
+ $transaction = $connection->beginTransaction();
|
|
|
+ try {
|
|
|
+ OrderService::expire($order);
|
|
|
+ $transaction->commit();
|
|
|
+ util::complete('已取消');
|
|
|
+ } catch (\Exception $exception) {
|
|
|
+ $transaction->rollBack();
|
|
|
+ Yii::info("取消原因:" . $exception->getMessage());
|
|
|
+ util::fail('取消失败');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//获取收款语音播报地址 ssh 20211231
|