]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Обработка возвратов
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 25 Feb 2025 10:39:08 +0000 (13:39 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 25 Feb 2025 10:39:08 +0000 (13:39 +0300)
erp24/media/controllers/NotificationController.php
erp24/services/MarketplaceService.php

index 78e71a36dd6d2fd16d02371d6ce48548c29f9428..7b950121e5d7ed009879ad3fa780310ddfb1052d 100644 (file)
@@ -250,8 +250,14 @@ class NotificationController extends Controller
                         }
                     }
                     $campaignId = $data['campaignId'];
-                    $orderId    = $data['orderId'];
-                    $orderData  = MarketplaceService::fetchOrder($campaignId, $orderId);
+                    $orderId = $data['orderId'];
+                    $returnId = $data['returnId'];
+
+                    $orderReturnData = MarketplaceService::fetchReturn($campaignId, $orderId, $returnId);
+                    $rawReturnData = $orderReturnData['rawReturnData'];
+                    $returnedAt = $orderReturnData['returnedAt'];
+
+                    $orderData = MarketplaceService::fetchOrder($campaignId, $orderId);
                     if (empty($orderData)) {
                         Yii::$app->response->statusCode = 400;
                         return $this->asJson([
@@ -262,12 +268,31 @@ class NotificationController extends Controller
                         ]);
                     }
                     $result = MarketplaceService::processOrders($orderData);
+                    $order = MarketplaceOrders::find()
+                        ->where(['marketplace_order_id' => (string)$orderId])
+                        ->one();
+
+                    $order->returned_at = $returnedAt;
+                    $order->return_data = $rawReturnData;
+                    if (!$order->save()) {
+                        Yii::$app->response->statusCode = 500;
+                        return $this->asJson([
+                            'error' => [
+                                'type' => 'UNKNOWN',
+                                'message' => 'Ошибка сохранения данных возврата в заказе'
+                            ]
+                        ]);
+                    }
+
                     return $this->asJson([
                         'version'   => '1.0.0',
                         'name'      => 'БазаЦветов24',
                         'timestamp' => date('Y-m-d H:i:s'),
                         'message'   => "ORDER_RETURN_CREATED событие обработано успешно",
-                        'result'    => $result
+                        'result'    => [
+                            'returned_at' => $order->returned_at,
+                            'return_data' => $order->return_data
+                        ]
                     ]);
 
                 default:
index a9b3db833c49ca8cbaf5654db1adb51415199974..33ada88f07bf1ae5a785c483cc7f0ca0cb659983 100644 (file)
@@ -4,6 +4,7 @@ namespace yii_app\services;
 
 use GuzzleHttp\Client;
 use OpenAPI\Client\Api\OrdersApi;
+use OpenAPI\Client\Api\ReturnsApi;
 use OpenAPI\Client\ApiException;
 use OpenAPI\Client\Configuration;
 use Yii;
@@ -1253,5 +1254,38 @@ class MarketplaceService
         return ['newOrders' => $newOrdersCount, 'updateOrders' => $updatedOrdersCount];
     }
 
+    /**
+     * Получает данные о возврате заказа через ReturnsApi.
+     *
+     * @param int $campaignId Идентификатор кампании (магазина).
+     * @param int $orderId    Идентификатор заказа.
+     * @param int $returnId   Идентификатор возврата.
+     *
+     * @return array Массив с данными возврата:
+     *               - 'returnedAt': Время создания возврата (ISO 8601).
+     *               - 'rawReturnData': Сырой ответ API в формате JSON.
+     *
+     * @throws \Exception Если происходит ошибка при запросе.
+     */
+    public static function fetchReturn($campaignId, $orderId, $returnId)
+    {
+        $config = Configuration::getDefaultConfiguration()
+            ->setApiKey('Api-Key', Yii::$app->params['YANDEX_MARKET_API_KEY']);
+        $client = new Client();
+        $returnsApi = new ReturnsApi($client, $config);
+        $contentType = ReturnsApi::contentTypes['getReturn'][0];
 
-}
\ No newline at end of file
+        try {
+            list($returnResponse) = $returnsApi->getReturnWithHttpInfo($campaignId, $orderId, $returnId, $contentType);
+            $returnResult = $returnResponse->getResult();
+            $returnedAt = $returnResult->getCreationDate();
+            $rawReturnData = json_encode($returnResponse);
+            return [
+                'returnedAt'    => $returnedAt,
+                'rawReturnData' => $rawReturnData,
+            ];
+        } catch (\Exception $e) {
+            Yii::error("Ошибка получения возврата: " . $e->getMessage());
+        }
+    }
+}