From d5f65c70f4270de41b4df0a5fd7ffc8eeca3846b Mon Sep 17 00:00:00 2001 From: fomichev Date: Tue, 25 Feb 2025 17:15:48 +0300 Subject: [PATCH] =?utf8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?utf8?q?=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../controllers/NotificationController.php | 48 +++++++++++++++---- erp24/records/MarketplaceOrders.php | 1 + 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/erp24/media/controllers/NotificationController.php b/erp24/media/controllers/NotificationController.php index 7b950121..81879ae2 100644 --- a/erp24/media/controllers/NotificationController.php +++ b/erp24/media/controllers/NotificationController.php @@ -2,6 +2,7 @@ namespace app\controllers; +use JsonException; use Yii; use yii\filters\AccessControl; use yii\helpers\Json; @@ -253,9 +254,35 @@ class NotificationController extends Controller $orderId = $data['orderId']; $returnId = $data['returnId']; - $orderReturnData = MarketplaceService::fetchReturn($campaignId, $orderId, $returnId); - $rawReturnData = $orderReturnData['rawReturnData']; - $returnedAt = $orderReturnData['returnedAt']; + $isTest = !empty($data['test']); + if ($isTest) { + $testDataObj = $data['test']; + if (!isset($testDataObj['result']['creationDate'])) { + Yii::$app->response->statusCode = 400; + return $this->asJson([ + 'error' => [ + 'type' => 'WRONG_EVENT_FORMAT', + 'message' => "Тестовые данные не содержат обязательное поле result.creationDate" + ] + ]); + } + $returnedAt = date('Y-m-d H:i:s', strtotime($testDataObj['result']['creationDate'])); + $rawReturnData = json_encode($data['test'], JSON_UNESCAPED_UNICODE); + } else { + try { + $orderReturnData = MarketplaceService::fetchReturn($campaignId, $orderId, $returnId); + $rawReturnData = $orderReturnData['rawReturnData']; + $returnedAt = $orderReturnData['returnedAt']; + } catch (\Exception $e) { + Yii::$app->response->statusCode = 400; + return $this->asJson([ + 'error' => [ + 'type' => 'WRONG_EVENT_FORMAT', + 'message' => "Ошибка получения данных возврата: " . $e->getMessage() + ] + ]); + } + } $orderData = MarketplaceService::fetchOrder($campaignId, $orderId); if (empty($orderData)) { @@ -279,21 +306,26 @@ class NotificationController extends Controller return $this->asJson([ 'error' => [ 'type' => 'UNKNOWN', - 'message' => 'Ошибка сохранения данных возврата в заказе' + 'message' => 'Ошибка сохранения данных возврата в заказе' . json_encode($order->getErrors(), JSON_UNESCAPED_UNICODE) ] ]); } - return $this->asJson([ + $response = [ 'version' => '1.0.0', 'name' => 'БазаЦветов24', 'timestamp' => date('Y-m-d H:i:s'), 'message' => "ORDER_RETURN_CREATED событие обработано успешно", 'result' => [ - 'returned_at' => $order->returned_at, - 'return_data' => $order->return_data + 'returned_at' => $order->returned_at ?? null, + 'return_data' => $order->return_data ?? null ] - ]); + ]; + if ($isTest) { + $response['test'] = true; + $response['testData'] = $data['test']; + } + return $this->asJson($response); default: Yii::info("Неизвестный тип события: {$eventType}"); diff --git a/erp24/records/MarketplaceOrders.php b/erp24/records/MarketplaceOrders.php index b774cca4..0738d9ed 100644 --- a/erp24/records/MarketplaceOrders.php +++ b/erp24/records/MarketplaceOrders.php @@ -54,6 +54,7 @@ class MarketplaceOrders extends \yii\db\ActiveRecord [['status_1c'], 'default', 'value' => 1], [['marketplace_order_id', 'status_id', 'substatus_id', 'creation_date', 'updated_at', 'total', 'delivery_total', 'buyer_total_before_discount', 'tax_system', 'payment_type', 'payment_method'], 'required'], [['store_id', 'status_id', 'substatus_id', 'fake', 'cancel_requested', 'status_1c'], 'default', 'value' => null], + [[ 'fake'], 'default', 'value' => 0], [['store_id', 'status_id', 'substatus_id', 'fake', 'cancel_requested', 'status_1c'], 'integer'], [['creation_date', 'updated_at', 'returned_at'], 'safe'], [['return_data', 'raw_data'], 'string'], -- 2.39.5