From: fomichev Date: Tue, 25 Feb 2025 10:39:08 +0000 (+0300) Subject: Обработка возвратов X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=fe93bf7306117bfb0621693cfe0fbc295fe737e0;p=erp24_rep%2Fyii-erp24%2F.git Обработка возвратов --- diff --git a/erp24/media/controllers/NotificationController.php b/erp24/media/controllers/NotificationController.php index 78e71a36..7b950121 100644 --- a/erp24/media/controllers/NotificationController.php +++ b/erp24/media/controllers/NotificationController.php @@ -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: diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index a9b3db83..33ada88f 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -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()); + } + } +}