}
}
$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([
]);
}
$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:
use GuzzleHttp\Client;
use OpenAPI\Client\Api\OrdersApi;
+use OpenAPI\Client\Api\ReturnsApi;
use OpenAPI\Client\ApiException;
use OpenAPI\Client\Configuration;
use Yii;
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());
+ }
+ }
+}