From 7174e44553561b23d22dd3fc8f4b9f4e9f5fee96 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Fri, 6 Mar 2026 17:57:12 +0300 Subject: [PATCH] =?utf8?q?=D0=B4=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D0=B0=D1=82?= =?utf8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/api2/controllers/BonusController.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/erp24/api2/controllers/BonusController.php b/erp24/api2/controllers/BonusController.php index 58226280..2952ad56 100644 --- a/erp24/api2/controllers/BonusController.php +++ b/erp24/api2/controllers/BonusController.php @@ -849,14 +849,23 @@ class BonusController extends BaseController if (!empty($lid_id)) { file_put_contents(self::OUT_DIR . '/sale_bonuses_' . $fl . '.json', PHP_EOL . '--' . __LINE__, FILE_APPEND); - $tipSaleForCheck = $usePromoWriteOff ? Promocode::TIP_SALE_PROMOBONUS : 'sale'; - $writeOffAlready = UsersBonus::find()->where(['lid_id' => $lid_id, 'phone' => $phone, 'tip_sale' => $tipSaleForCheck, 'tip' => 'minus'])->one() != null; + // TO8-22: Проверяем дубликат по ЛЮБОМУ tip_sale (sale или promobonus), + // чтобы повторный запрос с тем же check_id не начислил кэшбек + $writeOffAlready = UsersBonus::find() + ->where(['lid_id' => $lid_id, 'phone' => $phone, 'tip' => 'minus']) + ->andWhere(['in', 'tip_sale', ['sale', Promocode::TIP_SALE_PROMOBONUS]]) + ->one() != null; } file_put_contents(self::OUT_DIR . '/sale_bonuses_' . $fl . '.json', PHP_EOL . '--' . __LINE__, FILE_APPEND); + // TO8-22: Если по этому check_id уже было списание (обычное или промо) — отклоняем повторный запрос + if ($writeOffAlready) { + return $this->asJson(["error_id" => 7, "error" => "Списание по данному чеку уже произведено"]); + } + $user_balans_new = $user_balans; - if ($write_off_bonuses && !$writeOffAlready) { + if ($write_off_bonuses) { // TO8-22: При промо-списании auth_code не требуется (списание автоматическое) if (!$usePromoWriteOff) { // Проверка кода только при стандартном списании @@ -1909,7 +1918,7 @@ class BonusController extends BaseController "phone" => $phone, "code" => $result['code'], ], JSON_UNESCAPED_UNICODE)); - return $this->asJson(["error_id" => 10, "error" => "Ошибка активации промокода", "debug" => $e->getMessage()]); + return $this->asJson(["error_id" => 10, "error" => "Ошибка активации промокода"]); } } } -- 2.39.5