Skip to content

Чек-лист перед запуском ​

Пройдите все пункты до первого реального платежа. Пункты, отмеченные «владелец», решаются на вашей стороне с командой Eleven Pay.

Пилотный режим

Реальный приём платежей через счета Cashier требует авторизации организации и подтверждения от Eleven Pay. Этот чек-лист не заменяет онбординг.

Подключение и конфигурация ​

  • [ ] Базовый адрес API получен при подключении и задан как ELEVENPAY_BASE_URL (в коде нет значения по умолчанию, нет адреса «из документации»).
  • [ ] Ключ ep_live_… создан с минимальными возможностями (cashier.invoice.create, payment.read), лежит в секрет-хранилище сервера, не в Git, браузере или логах.
  • [ ] Адрес вебхука (HTTPS, доменное имя, стандартный порт, без редиректов) зарегистрирован до первого платежа; секрет подписи сохранён.
  • [ ] Окружение: счета Cashier — только live; тестовый ключ получает 409 cashier_environment_unsupported.

Заказы, суммы, идемпотентность ​

  • [ ] Сумма берётся из вашего каталога/заказа, а не из браузера; целое число тенге, строка "1500.00".
  • [ ] merchant_order_id — ваш стабильный идентификатор заказа (1–100 символов A-Za-z0-9_.:-).
  • [ ] Idempotency-Key создаётся и сохраняется вместе с заказом до первого запроса и повторяется без изменений при потере ответа, таймауте, перезапуске.
  • [ ] Двойной клик, повторная отправка формы и параллельные запросы создают один счёт (проверено).
  • [ ] Для invoice_state: "unknown" и «нет ответа» не создаётся второй счёт и не берётся новый ключ.

Вебхуки и выдача ​

  • [ ] Подпись проверяется по сырым байтам до разбора JSON; окно времени ±5 минут; несколько v1.
  • [ ] Недопустимая подпись → 401 и никаких действий.
  • [ ] Дедупликация по X-ElevenPay-Event-Id; выдача товара — условным обновлением статуса (WHERE status = 'awaiting_payment') в одной транзакции с записью события и очереди выдачи.
  • [ ] Перед выдачей сверены заказ, сумма и валюта; расхождение → ручной разбор, не выдача.
  • [ ] 2xx возвращается только после надёжной фиксации; своя ошибка → 5xx (Eleven Pay повторит).
  • [ ] «Оплачено» только после подтверждённого расчёта (вебхук payment.succeeded или GET со status: "succeeded" и settled: true).

Срок, неопределённость, сверка ​

  • [ ] Срок заказа — ваш; просрочка ничего не отменяет в Eleven Pay; поздний проверенный платёж идёт на ручной разбор (или выдаётся по явной политике), а не теряется.
  • [ ] Есть сверка по GET для заказов без итога и после перезапуска.
  • [ ] Реакция на 429 (Retry-After) и 5xx — повтор с тем же ключом и паузой.

Безопасность и эксплуатация ​

  • [ ] Ни ключ, ни секрет вебхука, ни телефон плательщика, ни заголовок Authorization не попадают в логи.
  • [ ] Существующие живые платёжные интеграции вашего сайта не изменены и не отключены без явного решения владельца: новая интеграция включается флагом, по умолчанию выключенным.
  • [ ] План отката: выключить флаг; открытые заказы остаются на прежнем способе оплаты.
  • [ ] Контакт поддержки Eleven Pay известен; порядок действий при ambiguous_create_blocked, cashier_session_not_active, cashier_limit_exceeded согласован.

Открытые вопросы (UNKNOWN на сегодня) ​

  • Публичный адрес Merchant API — решение владельца Eleven Pay.
  • Каноническая форма номера телефона плательщика (с кодом страны или без) — подтверждается при пилоте; передавайте, как ввёл плательщик, очистив лишь оформление.
  • Поведение при истечении/отказе счёта на стороне Eleven Pay — не определено; не рассчитывайте на события «просрочен»/«не удался».