| # | Проверка | Результат |
|---|---|---|
| 1 | Stripe: антифрод по карте (4242) | ✅ PASS |
| 2 | Stripe: антифрод по карте (5555) | ✅ PASS |
| 3 | UI: сырой exception вместо тоста | ❌ FAIL |
| 4 | isTrialBlocked скрывает trial на фронте | ⏳ DS-974 |
| 5 | Админка: история блокировок | ✅ PASS |
| 6 | Админка: маска карты | ❌ FAIL (пусто) |
| 7 | Админка: отмена блокировки | ❌ FAIL |
| 8 | CP: оплата на review | ✅ PASS |
| 9 | CP: антифрод по card_hash | ❌ FAIL |
| 10 | Параллельные Stripe+CP платежи в DB | ⚠️ Аномалия |
| 11 | user_fingerprint=NULL в card_fingerprints | ❌ FAIL |
| 12 | Провайдер в админке vs DB | ⚠️ Рассинхрон |
Юзер 798test1@mail.com (15.04, Telegram-бот, карта 4242 4242 4242 4242, Stripe)
Результат: trial заблокирован. В админке 3 записи (10:44, 10:45, 10:46), причина «Карта уже использовалась», провайдер stripe.
Юзер 798stripe2@mail.com (новая карта 5555 5555 5555 4444, Stripe, USD)
Результат: trial активирован корректно (первый раз картой). paymentProvider=1, currency=USD, pmLastFour=4444.
Юзер 798stripe3@mail.com (повтор карты 5555 5555 5555 4444, Stripe)
Результат: trial заблокирован. В админке 1 запись (12:18).
Вывод: Stripe антифрод работает корректно — повторная карта блокируется.
При блокировке триала показывается сырой exception:
exceptions.subscription.trialBlocked Пожалуйста, повторите попытку позже, чтобы произвести другой платёж
Network: create-stripe → 500. Воспроизводится на RU и EN интерфейсе.
Ожидание (Рустам): тост «Не удалось обработать платёж».
После антифрод-блокировки кнопка «Подключить на 7 дней бесплатно» остаётся видна. JSON: isTrialBlocked=false. DS-974 ещё не вмёржена (Код ревью).
798test1: 3 записи видны. 798stripe3: 1 запись видна.
❌ Маска карты пустая — колонка «Карта» показывает «-» во всех записях. Ожидание: маска типа ****4242.
Модалка открывается, поле «Причина снятия (необязательно)».
798test1 (3 попытки): ошибка «Блокировка не найдена или уже снята». Статус остаётся «Активна».
798stripe3 (1 попытка): ошибка «User not exists». Статус остаётся «Активна».
Оба варианта — FAIL. Отмена блокировки не работает.
798test1@mail.com: CP, карта 4242, рубли → Pro. UI: «Вы подключили тариф Pro», Visa *4242.
798test1@mail.com — CP, карта 4242, рубли → Pro (15.04)
798cp2@mail.com — CP, та же карта 4242, рубли → trial выдан (isTrial=true, isTrialBlocked=false)
DB evidence (card_fingerprints):
798test1: provider=cloudpayments, card_hash=f24240e8…
798cp2: provider=cloudpayments, card_hash=f24240e8… (одинаковый!)
В админке у 798cp2 — 0 записей антифрод-блокировок.
Вывод: антифрод НЕ проверяет card_hash между аккаунтами при оплате через CP.
При каждой оплате через Stripe создаются ДВЕ записи в payments:
| provider | currency | price | status | type |
|---|---|---|---|---|
| 1 (Stripe) | USD | 0 | 3 | 2 (trial) |
| 3 (CP) | RUB | 100 | 1 | 1 (paid) |
Пример 798stripe2@mail.com. Тот же паттерн у 798a4, 798b4, 798v4, 798bot1, 798mob1.
card_fingerprint записывается только для Stripe, CP-платёж не создаёт запись в card_fingerprints.
У ВСЕХ юзеров в card_fingerprints поле user_fingerprint = NULL. Device context не связывается с картой.
При этом в user_fingerprints fingerprint записывается корректно:
| fingerprint | device | |
|---|---|---|
| 798test1 | 7d6770ac… | Комп Натальи (15.04) |
| 798-claud | 7d6770ac… | Комп Натальи (14.04) |
| 798cp2 | afa8883d… | Другой комп (13.04) |
| 798mob1 | 40c8c86e… | Мобильный |
| 798a4/b4/v4/cp1-3/mir1-2/bot1 | afa8883d… | Один комп (9 юзеров) |
В админке блокировки показывают «stripe», но payments для 798test1 — все provider=3 (CP), currency=RUB.
| provider | card_hash | user_fingerprint | |
|---|---|---|---|
| 798cp2 | cloudpayments | f24240e8… | NULL |
| 798test1 | cloudpayments | f24240e8… | NULL |
| 798stripe2 | stripe | 6AK7yoqQQae7cXEv | NULL |
| 798a4 | stripe | 0trqiz6XoXzeotX8 | NULL |
| Провайдер | Карта | Дата | Итог | |
|---|---|---|---|---|
| 798test1@mail.com | CP | 4242 | 15.04 | Pro (антифрод заблокировал trial) |
| 798cp2@mail.com | CP | 4242 | 13→15.04 | Trial выдан ❌ |
| 798-claud@mail.com | CP | 4242 | 14.04 | Pro |
| 798stripe2@mail.com | Stripe | 5555…4444 | 15.04 | Trial (первый раз) ✅ |
| 798stripe3@mail.com | Stripe | 5555…4444 | 15.04 | Trial заблокирован ✅ |
DS-798 — ретест антифрода (15.04.2026, стенд 979 + api-2020) Frontend: https://deploy-preview-979--chatplace-front.netlify.app/ Backend: https://api-2020.review.chatplace.io/ Связанная задача: DS-974 (isTrialBlocked — Код ревью) СВОДКА: # | Проверка | Результат ----+----------------------------------------+---------- 1 | Stripe: антифрод по карте (4242) | ✅ PASS 2 | Stripe: антифрод по карте (5555) | ✅ PASS 3 | UI: сырой exception вместо тоста | ❌ FAIL 4 | isTrialBlocked скрывает trial | ⏳ DS-974 5 | Админка: история блокировок | ✅ PASS 6 | Админка: маска карты | ❌ FAIL (пусто) 7 | Админка: отмена блокировки | ❌ FAIL 8 | CP: оплата на review | ✅ PASS 9 | CP: антифрод по card_hash | ❌ FAIL 10 | Параллельные Stripe+CP платежи в DB | ⚠️ Аномалия 11 | user_fingerprint=NULL в card_fingerprints | ❌ FAIL 12 | Провайдер в админке vs DB | ⚠️ Рассинхрон ─── Расшифровка ─── 1. Stripe антифрод — ✅ PASS 798test1@mail.com (карта 4242): trial заблокирован, в админке 3 записи. 798stripe2@mail.com (новая карта 5555): trial активирован (первый раз). 798stripe3@mail.com (повтор 5555): trial заблокирован, в админке 1 запись. 2. UI ошибки — ❌ FAIL Показывается сырой exception: exceptions.subscription.trialBlocked Network: create-stripe → 500 Ожидание (Рустам): тост «Не удалось обработать платёж» 3. isTrialBlocked на фронте — ⏳ DS-974 После блокировки кнопка «Подключить на 7 дней бесплатно» остаётся видна. DS-974 ещё не вмёржена (Код ревью). 4. Админка: история блокировок — ✅ PASS ❌ Маска карты пустая — колонка «Карта» показывает «-» во всех записях. 5. Админка: отмена блокировки — ❌ FAIL 798test1: «Блокировка не найдена или уже снята» — статус не меняется. 798stripe3: «User not exists» — статус не меняется. 6. CP оплата — ✅ PASS 798test1: CP, карта 4242, рубли → Pro. 7. CP антифрод — ❌ FAIL 798cp2@mail.com: CP, та же карта 4242 → trial выдан (isTrial=true, isTrialBlocked=false). DB: card_hash одинаковый (f24240e8…) у обоих юзеров. В админке у 798cp2 — 0 записей антифрод-блокировок. 8. Параллельные платежи — ⚠️ Аномалия При Stripe оплате создаются 2 записи: provider=1 (USD, status=3) + provider=3 (RUB 100₽, status=1). card_fingerprint записывается только для Stripe. 9. user_fingerprint — ❌ FAIL У ВСЕХ юзеров в card_fingerprints поле user_fingerprint = NULL. Device context не связывается с картой. 10. Провайдер в админке vs DB — ⚠️ Рассинхрон В админке «stripe», в DB — provider=3 (CP). Тестовые аккаунты (review api-2020): 798test1, 798cp2, 798-claud, 798stripe2, 798stripe3 + вчерашние: 798a4, 798b4, 798v4, 798bot1, 798mob1, 798cp1/2/3, 798mir1/2