]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Тестирование возвратов
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 25 Feb 2025 14:15:48 +0000 (17:15 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 25 Feb 2025 14:15:48 +0000 (17:15 +0300)
erp24/media/controllers/NotificationController.php
erp24/records/MarketplaceOrders.php

index 7b950121e5d7ed009879ad3fa780310ddfb1052d..81879ae2e433d56ba972cb0653c0c93caaa8937b 100644 (file)
@@ -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}");
index b774cca4148fae55b67817f53da09c3f1ab68919..0738d9eda9fd5ac4f32a77d8d93d39d6f013d7bd 100644 (file)
@@ -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'],