Good Carder
Professional
- Messages
- 521
- Reaction score
- 411
- Points
- 63
Введение: почему код ошибки важнее самой карты
Начинающий видит фразу «Your card was declined» и впадает в ступор. Профи за доли секунды смотрит на три числа: HTTP статус, текстовый код ответа и время отклика (TTFB). По ним он определяет, где именно сломалось: карта мертва, прокси в черном списке, антифред магазина сработал или банк эмитента просто пустил транзакцию в песок.В этой статье мы разберем внутреннюю кухню платежных шлюзов. Вы научитесь расшифровывать более 20 кодов ошибок, отличать отказ эмитента от отказа антифрода, пользоваться консолью браузера как профессиональным инструментом.
Часть 1. Как устроен путь платежа: три фильтра, которые отклоняют транзакцию
Прежде чем читать коды, поймите последовательность проверок. Запрос от вашего браузера до банка-эмитента проходит через три барьера:
Code:
[Ваш браузер]
→ 1. Валидация на стороне магазина (формат данных, базовый антифрод)
→ 2. Платежный шлюз (Stripe, Adyen и др.) – проверяет fingerprint, прокси, BIN-листы
→ 3. Банк-эмитент (банк, выпустивший карту) – проверяет баланс, стоп-листы, 3DS
Какой барьер отклонил – определяют по времени задержки и коду:
| Барьер | Типичное время ответа | Характерные коды |
|---|---|---|
| 1. Магазин | 0–500 мс | 400 Bad Request, invalid_number, expired_card |
| 2. Шлюз | 500 мс – 2 сек | fraudulent, blocked, generic_decline |
| 3. Банк | 1–6 сек | do_not_honor, insufficient_funds, pick_up_card, call_issuer |
Ключевой навык: вы видите задержку – уже знаете, в какой трети искать проблему.
Часть 2. Полный словарь кодов ошибок (20+ вариантов с расшифровкой)
Все коды ниже приведены в том виде, в каком их отдают платежные шлюзы (Stripe, Braintree, Adyen, Square). Они могут незначительно отличаться текстом, но смысл един.Группа А. Ошибки формата данных (магазин или шлюз, < 1 сек)
| Код (текст) | HTTP | Расшифровка | Что делать |
|---|---|---|---|
| invalid_number | 400 | Номер карты не проходит алгоритм Луна или не соответствует BIN | Проверьте карту визуально; возможно продавец подсунул рандом |
| invalid_expiry_month / invalid_expiry_year | 400 | Неверный месяц или год (прошлый, или 99) | Сверьте срок с картой |
| invalid_cvc | 400 | CVV/CVC не той длины или неверный | Перепроверьте; если всё верно – карта может быть без CVV (редкость) |
| expired_card | 402 | Срок истёк | Карта – утиль |
| incorrect_number | 400 | Частный случай invalid_number | То же |
| missing_payment_information | 400 | Не заполнено одно из полей (имя, адрес, страна) | Автоматизация сломалась; проверьте скрипт |
| invalid_request | 400 | Неверный формат запроса к API (не ваш случай, если вы через браузер) | Проблема в интеграции магазина, не ваша |
Группа Б. Отказы эмитента (банка карты) – время 1–6 сек
| Код | HTTP | Типичная задержка | Смысл | Действие |
|---|---|---|---|---|
| do_not_honor | 402 | 0.8–2 сек | Карта в стоп-листе банка (украдена, просрочена, заблокирована за фрод) | Карту – в корзину. Не тратьте время |
| insufficient_funds | 402 | 1.5–3 сек | Баланса меньше суммы чека | Уменьшите сумму до $1-5 для теста; если не проходит – карта пуста |
| lost_card | 402 | < 1 сек | Держатель заявил о потере | Аналогично do_not_honor |
| stolen_card | 402 | < 1 сек | Карта помечена как украденная | Не используйте этот BIN вообще |
| pick_up_card | 402 | 1–2 сек | Банк просит банкомат изъять карту (компрометация) | Опасный BIN; магазины могут забанить ваш IP |
| call_issuer | 402 | 2–5 сек | Банк хочет голосового подтверждения | Бесполезно для кардинга |
| transaction_not_allowed | 403 | 1–3 сек | Карта заблокирована для данного типа транзакций (например, только снятие в ATM) | Ищите карты с флагом Consumer или Retail |
| restricted_card | 403 | 1–2 сек | Карта имеет ограничения по странам или каналам | Требуется BIN без ограничений |
| invalid_transaction | 402 | 1–3 сек | Неверная сумма или валюта для данной карты | Смените валюту на USD/EUR/GBP в зависимости от BIN |
| withdrawal_limit_exceeded | 402 | 1–2 сек | Превышен суточный лимит | Отложите карту на 24 часа |
| hard_decline | 402 | 0.5–1 сек | Обобщённый отказ без деталей (старые шлюзы) | Вероятно, карта мертва |
Группа В. Отказы антифрода (шлюз или магазин) – время 0.5–3 сек
| Код | HTTP | Задержка | Смысл | Действие |
|---|---|---|---|---|
| fraudulent | 403 | 1–2 сек | Сработало правило антифрода (Stripe Radar, Kount) | Меняйте прокси, антидетект, fingerprint |
| blocked | 403 | 0.5–1 сек | IP, BIN или email в чёрном списке магазина | Смените прокси и email |
| generic_decline | 402 | 2–6 сек | Отказ без причины – обычно из-за скоринга | Комплексно чистите среду |
| do_not_honor (но задержка >3 сек) | 402 | 3–5 сек | Смешанный случай: антифрод магазина отправил запрос, но банк ответил отказом | Анализируйте оба аспекта |
| processing_error | 500 | 2–10 сек | Ошибка на стороне шлюза (редко) | Повторите через минуту |
| invalid_account | 403 | 0.5–1 сек | Магазин не настроен на приём карт данного BIN | Не ваш косяк |
Группа Г. 3D Secure
| Код | HTTP | Задержка | Смысл | Действие |
|---|---|---|---|---|
| authentication_required | 402 | 3–8 сек | Карта требует прохождения 3DS | Без обхода – тупик |
| 3d_secure_failed | 402 | 4–10 сек | Попытка прошла, но аутентификация провалена | Карта жива, но 3DS не пройти стандартными методами |
Часть 3. Как отличить отказ эмитента от отказа антифрода по таймингу и паттернам
Это главный навык. Сравните две ситуации:Ситуация А (отказ эмитента):
- Время ответа: 1.8 сек
- Код: do_not_honor
- Предыстория: карта свежая, BIN 414720 (Chase), прокси резидентный США.
Вывод: банк Chase заблокировал карту (украдена). Меняем карту.
Ситуация Б (отказ антифрода):
- Время ответа: 0.9 сек
- Код: fraudulent
- Предыстория: прокси дешёвый дата-центр, не отключен WebRTC.
Вывод: Stripe Radar зарезал по fingerprint. Меняем прокси и настройки антидетекта.
Как определить точно, если код неоднозначный (например, generic_decline)?
Проведите A/B-тест:
- Сделайте ту же попытку с заведомо живой картой (например, вашей собственной дебетовой с небольшим балансом).
- Если ваша карта проходит – проблема в чужой карте.
- Если ваша карта тоже получает generic_decline – проблема в среде (прокси/антидетект).
- Сделайте попытку с тем же профилем, но на другом сайте (с тем же шлюзом, например, два магазина на Stripe).
- Отказ везде одинаковый → среда плохая.
- Отказ только на одном сайте → магазин банит ваш BIN или IP.
Эмпирическое правило:
- Задержка < 1.5 сек и код из группы А или В → антифрод магазина/шлюза.
- Задержка > 1.5 сек и код из группы Б → банк эмитента.
- Исключение: insufficient_funds может прийти быстро, если баланс проверяется локальным кэшем шлюза (но редко).
Часть 4. Таблица соответствия HTTP статусов + текстовых сообщений для популярных шлюзов
Один и тот же реальный отказ разные шлюзы могут называть по-разному. Ниже – сводная таблица для Stripe, Adyen, Braintree, Square.| Реальная причина | Stripe (текст) | Adyen | Braintree | Square | HTTP |
|---|---|---|---|---|---|
| Неверный номер | invalid_number | Invalid Card Number | 2000 (код в ответе) | INVALID_CARD | 400 |
| Неверный CVV | invalid_cvc | Invalid CVC | 2001 | CVV_FAILURE | 400 |
| Недостаточно средств | insufficient_funds | Not Enough Balance | 2004 | INSUFFICIENT_FUNDS | 402 |
| Карта украдена | do_not_honor | Stolen Card | 2005 | CARD_DECLINED | 402 |
| Антифрод | fraudulent | Risk Score Too High | 2016 (fraud) | DECLINED_RISK | 403 |
| 3DS требуется | authentication_required | 3DS2 Required | 2038 | THREEDS_REQUIRED | 402 |
| Общий отказ | generic_decline | Declined | 2000 (общий) | GENERIC_DECLINE | 402 |
| Просрочена | expired_card | Expired Card | 2003 | EXPIRED_CARD | 402 |
| Изъять карту | pick_up_card | Pick Up Card | 2006 | PICK_UP_CARD | 402 |
| Лимит превышен | withdrawal_limit_exceeded | Limit Exceeded | 2010 | LIMIT_EXCEEDED | 402 |
Как пользоваться таблицей:
Увидели на сайте (Square) сообщение CARD_DECLINED и задержку 0.5 сек – смотрите в таблице: это аналог do_not_honor Stripe, то есть карта в стоп-листе.
Часть 5. Практика: читаем консоль Network как рентген
5.1. Где искать запрос платежа
- Откройте сайт с формой оплаты.
- Нажмите F12 → вкладка Network (Сеть).
- Очистите логи (кнопка
). - Заполните форму карты и нажмите Pay.
- В логах появится множество запросов. Найдите тот, который содержит:
- payments, create-payment-intent, charge, transactions, authorize
- Или метод POST с ответом 402, 400, 403.
Пример для Stripe: ищите запрос к https://api.stripe.com/v1/payment_intents/.../confirm или https://m.stripe.com/6.
5.2. Что смотреть в деталях запроса
Кликните на нужный запрос → откроются вкладки:- Headers → смотрите Status Code (например, 402 Payment Required).
- Preview или Response – здесь лежит текстовый код ошибки и сообщение.
Скриншот (описание):
Вкладка Headers показывает:
Status: 402 Payment Required
Вкладка Response:
{ "error": { "code": "insufficient_funds", "message": "Your card has insufficient funds." } }
Плюс вкладка Timing показывает точное время: Waiting (TTFB): 2.3 sec. Это и есть задержка.
5.3. Расшифровка реального примера
Пример 1 (отказ эмитента):- Запрос: POST /v1/payment_intents/pi_123/confirm
- Status: 402
- Response: {"error":{"code":"do_not_honor","decline_code":"do_not_honor"}}
- Timing: TTFB: 1.2 sec
Диагноз: отказ банка эмитента по причине стоп-листа. Карта мертва.
Пример 2 (антифрод Stripe):
- Запрос: POST /v1/payment_intents/pi_456/confirm
- Status: 403
- Response: {"error":{"code":"fraudulent","message":"Your payment was blocked by Radar."}}
- Timing: TTFB: 0.6 sec
Диагноз: сработал антифрод шлюза. Проблема в среде (прокси, fingerprint).
Пример 3 (3DS):
- Запрос: POST /payments
- Status: 402
- Response: {"error":{"code":"authentication_required","payment_intent":{"next_action":{"type":"redirect_to_url"}}}}
- Timing: TTFB: 4.1 sec
Диагноз: карта требует 3DS. Без обхода – не пройти.
5.4. Продвинутый приём: смотрим заголовки запроса
В том же Network перейдите вкладку Headers → Request Headers. Обратите внимание на:- User-Agent – соответствует ли вашему профилю антидетекта?
- Accept-Language – совпадает ли со страной прокси? (например, en-US,en;q=0.9 для США)
- Origin и Referer – должны вести на тот же сайт.
- CF-Ray (если сайт за Cloudflare) – наличие этого заголовка говорит, что Cloudflare проверил вас. Если после отказа вы видите CF-Ray и время около 0.3 сек – вас заблокировал Cloudflare WAF, даже не доходя до платежного шлюза.
Часть 6. Чек-лист диагностики по коду и времени
Распечатайте или сохраните. При отказе выполняйте последовательно:- Зафиксируйте HTTP статус и текстовый код (из Response).
- Замерьте TTFB (из Timing).
- Сопоставьте с таблицей выше:
- 4xx (400, 402, 403) – ошибка клиента/платежа.
- 5xx – проблема на стороне сервера (ваш прокси может быть ни при чём).
- Определите группу:
- Время < 1 сек и код из группы А (invalid_number, expired_card) → ошибка ввода или карта-фуфло.
- Время 1-3 сек и код do_not_honor/insufficient_funds → отказ эмитента.
- Время < 1.5 сек и код fraudulent/blocked → антифрод шлюза.
- Подтвердите тестом:
- Смените карту на заведомо живую (свою) – если ошибка та же, проблема не в карте.
- Смените прокси на резидентный и повторите – если ошибка ушла, проблема была в прокси.
Часть 7. Ошибки новичков при чтении кодов
Ошибка 1: видят generic_decline и думают «карта плохая». На самом деле generic_decline с задержкой 3 сек часто означает, что антифред магазина не пустил платёж, не утруждая себя точным кодом.Ошибка 2: игнорируют время ответа. Один и тот же код do_not_honor за 0.8 сек и за 4 сек – абсолютно разные истории. Первое – карта в чёрном списке банка. Второе – банк долго думал, возможно, баланс был на грани, но потом всё равно отказал.
Ошибка 3: не проверяют decline_code в Stripe. Stripe часто возвращает два поля: code (общий) и decline_code (конкретный от банка). Например, code: generic_decline, decline_code: insufficient_funds – это настоящая причина. Смотрите всегда decline_code, если он есть.
Заключение: превращаем отказ в диагноз
Теперь вы умеете:- По коду и времени определять, кто именно отклонил платёж: магазин, шлюз или банк.
- Различать 20+ типов отказов и знать, что делать в каждом случае.
- Пользоваться консолью Network для точного сбора данных.
- Отличать антифрод от недостатка средств.
В следующей статье (по вашему выбору) разберём, как проверять карту микро-платежами и создавать свой чекер.
А пока – сохраните эту статью как шпаргалку. При каждом отказе открывайте её и сверяйте. Через 20–30 попыток чтение кодов станет для вас автоматическим.
Быстрая памятка на одну строку:
«Время <1с + invalid/expired → кривые руки или фуфло; 1-3с + do_not_honor → карта мертва; <1.5с + fraudulent → грязная среда; >3с + generic_decline → антифред магазина»
