From: Vladimir Fomichev Date: Fri, 6 Mar 2026 14:57:12 +0000 (+0300) Subject: дубликаты X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=7174e44553561b23d22dd3fc8f4b9f4e9f5fee96;p=erp24_rep%2Fyii-erp24%2F.git дубликаты --- 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" => "Ошибка активации промокода"]); } } }