+++ /dev/null
-<?php
-
-namespace app\controllers;
-
-use Yii;
-use yii\rest\Controller;
-use yii\web\BadRequestHttpException;
-use yii\web\MethodNotAllowedHttpException;
-use yii\web\ServerErrorHttpException;
-use yii_app\records\UsersWhatsappMessage;
-use yii\web\Response;
-
-class WhatsappMessageStatus extends Controller
-{
- /**
- * Принимает callback-статус сообщения от API edna и сохраняет новый статус в БД.
- *
- * Пример тела запроса:
- * {
- * "requestId": "test-00135",
- * "cascadeId": 11,
- * "cascadeStageUUID": "001-test001",
- * "subject": "test_subject",
- * "subjectId": 2,
- * "status": "READ",
- * "statusAt": "2023-10-31T11:07:56Z",
- * "error": null,
- * "comment": null,
- * "paymentData": {
- * "@type": "WhatsAppConversationPaymentData",
- * "conversationId": "test0001",
- * "conversationType": "marketing",
- * "chargeable": true,
- * "type": "WHATSAPP_CONVERSATION"
- * }
- * }
- *
- * @return array Ответ в формате JSON.
- *
- * @throws BadRequestHttpException Если отсутствует обязательный параметр или неверный JSON.
- * @throws MethodNotAllowedHttpException Если запрос не методом POST.
- * @throws ServerErrorHttpException Если не удалось сохранить запись.
- */
- public function actionCallbackStatus()
- {
- Yii::$app->response->format = Response::FORMAT_JSON;
- $request = Yii::$app->request;
-
- if (!$request->isPost) {
- throw new MethodNotAllowedHttpException("Метод не разрешён. Используйте POST.");
- }
-
- $rawBody = $request->getRawBody();
- $data = json_decode($rawBody, true);
-
- if (json_last_error() !== JSON_ERROR_NONE) {
- Yii::error("Неверный JSON: " . $rawBody, __METHOD__);
- throw new BadRequestHttpException("Неверный формат JSON.");
- }
-
- if (empty($data['requestId'])) {
- throw new BadRequestHttpException("Отсутствует обязательный параметр: requestId.");
- }
-
- $requestId = $data['requestId'];
-
- $model = UsersWhatsappMessage::findOne(['request_id' => $requestId]);
- if (!$model) {
- Yii::warning("Запись с request_id {$requestId} не найдена.", __METHOD__);
- return ['message' => "Запись с request_id {$requestId} не найдена."];
- }
-
- if (isset($data['status'])) {
- $model->status = $data['status'];
- } else {
- throw new BadRequestHttpException("Отсутствует обязательный параметр: status.");
- }
-
- if ($model->save()) {
- Yii::info("Статус сообщения с request_id {$requestId} обновлён на {$model->status}.", __METHOD__);
- return ['message' => "Статус сообщения обновлён."];
- } else {
- Yii::error("Не удалось сохранить обновлённый статус для request_id {$requestId}.", __METHOD__);
- throw new ServerErrorHttpException("Не удалось сохранить обновлённый статус.");
- }
- }
-}
\ No newline at end of file
--- /dev/null
+<?php
+
+namespace app\controllers;
+
+use Yii;
+use yii\rest\Controller;
+use yii\web\BadRequestHttpException;
+use yii\web\MethodNotAllowedHttpException;
+use yii\web\ServerErrorHttpException;
+use yii_app\records\UsersWhatsappMessage;
+use yii\web\Response;
+
+class WhatsappMessageStatusController extends Controller
+{
+ /**
+ * Принимает callback-статус сообщения от API edna и сохраняет новый статус в БД.
+ *
+ * Пример тела запроса:
+ * {
+ * "requestId": "test-00135",
+ * "cascadeId": 11,
+ * "cascadeStageUUID": "001-test001",
+ * "subject": "test_subject",
+ * "subjectId": 2,
+ * "status": "READ",
+ * "statusAt": "2023-10-31T11:07:56Z",
+ * "error": null,
+ * "comment": null,
+ * "paymentData": {
+ * "@type": "WhatsAppConversationPaymentData",
+ * "conversationId": "test0001",
+ * "conversationType": "marketing",
+ * "chargeable": true,
+ * "type": "WHATSAPP_CONVERSATION"
+ * }
+ * }
+ *
+ * @return array Ответ в формате JSON.
+ *
+ * @throws BadRequestHttpException Если отсутствует обязательный параметр или неверный JSON.
+ * @throws MethodNotAllowedHttpException Если запрос не методом POST.
+ * @throws ServerErrorHttpException Если не удалось сохранить запись.
+ */
+ public function actionCallbackStatus()
+ {
+ Yii::$app->response->format = Response::FORMAT_JSON;
+ $request = Yii::$app->request;
+
+ if (!$request->isPost) {
+ throw new MethodNotAllowedHttpException("Метод не разрешён. Используйте POST.");
+ }
+
+ $rawBody = $request->getRawBody();
+ $data = json_decode($rawBody, true);
+
+ if (json_last_error() !== JSON_ERROR_NONE) {
+ Yii::error("Неверный JSON: " . $rawBody, __METHOD__);
+ throw new BadRequestHttpException("Неверный формат JSON.");
+ }
+
+ if (empty($data['requestId'])) {
+ throw new BadRequestHttpException("Отсутствует обязательный параметр: requestId.");
+ }
+
+ $requestId = $data['requestId'];
+
+ $model = UsersWhatsappMessage::findOne(['request_id' => $requestId]);
+ if (!$model) {
+ Yii::warning("Запись с request_id {$requestId} не найдена.", __METHOD__);
+ return ['message' => "Запись с request_id {$requestId} не найдена."];
+ }
+
+ if (isset($data['status'])) {
+ $model->status = $data['status'];
+ } else {
+ throw new BadRequestHttpException("Отсутствует обязательный параметр: status.");
+ }
+
+ if ($model->save()) {
+ Yii::info("Статус сообщения с request_id {$requestId} обновлён на {$model->status}.", __METHOD__);
+ return ['message' => "Статус сообщения обновлён."];
+ } else {
+ Yii::error("Не удалось сохранить обновлённый статус для request_id {$requestId}.", __METHOD__);
+ throw new ServerErrorHttpException("Не удалось сохранить обновлённый статус.");
+ }
+ }
+}
\ No newline at end of file