Чек-лист перед запуском
Пройдите все пункты до первого реального платежа. Пункты, отмеченные «владелец», решаются на вашей стороне с командой 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 — не определено; не рассчитывайте на события «просрочен»/«не удался».