Тестирование через sandbox и чек-лист перед запуском
Все, что можно проверить до того, как в дело вступит настоящая карта: тестовые ключи, провайдер sandbox, тестовые карты для каждого результата и чек-лист, который должен быть выполнен перед вашим первым реальным платежом в Армении.
Худший способ узнать, что в вашей странице оплаты есть баг, - это узнать об этом на деньгах клиента. У Paynet есть полноценная sandbox именно для того, чтобы ваш первый реальный платеж прошел скучно: вы уже точно знаете, что происходит при успехе, при отказе, при тайм-ауте и при возврате, потому что видели каждый из этих сценариев своими глазами.
В этой статье разбирается, что дает sandbox, как ей пользоваться, а затем чек-лист, который решает, действительно ли вы готовы принимать реальные платежи в Армении.
Тестовые ключи и реальные ключи
У API-ключей есть среда выполнения. Тестовый ключ начинается с sk_test_ и превращает каждый совершенный с его помощью платеж в тестовый платеж sandbox. Реальный ключ начинается с sk_live_ и принимает настоящие деньги.
Каждый новый аккаунт Paynet начинается с ключа под названием Default. Это тестовый ключ, поэтому он создает только платежи sandbox. С его помощью можно начать интеграцию сразу, до какой-либо верификации и до завершения банковских документов. Создайте реальный ключ, когда будете готовы к реальным платежам.
У ключей также есть область доступа. При создании вы выбираете уровень доступа:
- Полный доступ создает, читает и возвращает платежи, а также может покупать единицы. Держите его на собственном сервере.
- Только платежи создает и читает платежи и платежные ссылки, но не может делать возвраты или тратить ваш баланс. Это правильный ключ, чтобы передать витрине или подрядчику, и он возвращает
403 insufficient_scopeна вызовах, которые ему не разрешены.
Ключи хранятся в виде хэша SHA-256, а исходное значение показывается один раз, при создании. Скопируйте его в этот момент и сохраните в переменной окружения. Если вы его потеряли, отзовите ключ и создайте новый.
Еще одна деталь области доступа, которая избавляет от путаницы: тестовый ключ показывает только платежи sandbox, а реальный ключ - только реальные. Поиск реального платежа с помощью тестового ключа возвращает 404, а не ошибку, объясняющую несоответствие. Если платеж, который вы видите в панели управления, невидим для вашего кода, проверьте, каким ключом пользуется ваш код.
Два пути в sandbox
Есть две двери, и они ведут в одну и ту же комнату.
Тестовый API-ключ. Используйте sk_test_, и каждый созданный им платеж становится платежом sandbox.
Провайдер Sandbox. Установите его в разделе "Провайдеры" вашей панели управления и отправляйте "processor": "sandbox". Он также работает внутри плагинов CMS, и это важно: именно так вы тестируете настоящую витрину от начала до конца, с настоящей корзиной и настоящим заказом, не написав ни строчки кода.
В любом случае ни один банк не задействуется, деньги не перемещаются, и ничего не выставляется в счет и не засчитывается. Тестовые платежи отображаются на вкладке "Тест" в вашей панели управления, так что они никогда не влияют на ваши показатели выручки.
Тестовые карты
На тестовой странице оплаты номер карты определяет результат:
| Номер карты | Результат |
|---|---|
| 4111 1111 1111 1111 | Одобрено |
| 4000 0000 0000 0002 | Отклонено эмитентом |
| 4000 0000 0000 0069 | Недостаточно средств |
| 4000 0000 0000 0119 | Тайм-аут процессора |
| 4000 0000 0000 0101 | Ошибка 3-D Secure |
| 4000 0000 0000 0127 | Превышен лимит суммы |
| 4000 0000 0000 0200 | Дублирующая транзакция |
| 4000 0000 0000 0259 | Истек срок транзакции |
| 4000 0000 0000 0309 | Процессор недоступен |
| 4000 0000 0000 0341 | Общая ошибка |
Любой другой шестнадцатизначный номер одобряется. Срок действия, CVV и имя держателя карты не проверяются, так что вводите что угодно.
План тестирования, который стоит выполнить
Прогон только одобренной карты почти ничего не доказывает. Магазины ломаются именно на ошибках. Разумный минимум:
- Одобрено. Заказ переходит в статус оплаченного, покупатель видит подтверждение, остатки на складе уменьшаются, письмо отправляется.
- Отклонено эмитентом. Заказ не переходит в статус оплаченного, покупатель может попробовать снова, и никакие остатки на складе не расходуются.
- Тайм-аут процессора. Ваш код не зависает и не списывает деньги дважды. Именно этот случай показывает, разумны ли ваши тайм-ауты и повторные попытки.
- Заброшенный платеж. Создайте платеж и просто не оплачивайте его. Он истечет через 20 минут и вызовет webhook со статусом
expired. Убедитесь, что ваш магазин отменяет заказ или освобождает его. - Возврат. Верните деньги за завершенный тестовый платеж sandbox, полностью и частично, и убедитесь, что ваши записи совпадают. Отправляйте
Idempotency-Key, чтобы повторная попытка после тайм-аута возвращала тот же возврат, а не создавала второй. - Повтор webhook. Доставьте одно и то же событие дважды и убедитесь, что ваш обработчик игнорирует дубликат по
delivery_id.
Тестовые платежи вызывают webhook с livemode: false, так что весь путь уведомлений можно проверить до запуска. Детали каждого поля - в справочнике по API.
Чек-лист перед запуском
Зеленый свет в sandbox не означает готовность к реальным платежам. Пять вещей отделяют вас от реального платежа.
1. Верифицированный домен
Покупатели могут платить только на верифицированном вами домене, и return_url, cancel_url и callback_url должны указывать на него. Добавьте домен в панели управления и подтвердите право на него: DNS TXT-записью, простым текстовым файлом в корне сайта или подтверждением владения. Если вы подключили магазин с помощью плагина, процесс Connect верифицировал домен за вас.
Два практических замечания. localhost верифицировать нельзя, так что верифицируйте адрес тестовой среды, если хотите тестировать с него. И подтверждение владения означает принятие ответственности за платежи, проходящие через этот домен, включая ответственность по чарджбэкам, так что верифицируйте только домены, которые действительно принадлежат вам.
2. Верифицированный бизнес
Реальные платежи открываются после верификации бизнеса. Вы указываете юридическое название компании, ИНН, организационно-правовую форму, юридический адрес и контактный телефон, а также документы, соответствующие вашей форме: свидетельство о государственной регистрации, свидетельство о постановке на налоговый учет и удостоверение личности уполномоченного лица. Отправить их может только владелец аккаунта.
Проверка обычно занимает один-два рабочих дня, а решение приходит по электронной почте и в панели управления. До этого все работает в тестовом режиме, с неограниченным количеством бесплатных тестовых платежей, так что документы стоит подать заранее и вести разработку, пока проверка идет.
Если вызов возвращает VERIFICATION_REQUIRED, именно это от вас и требуется.
3. Реальный провайдер, подключенный и включенный
Paynet - это шлюз, а не эквайер. Вы приносите собственные аккаунты: карточный шлюз ARCA от вашего банка, мерчант-аккаунт Idram, мерчант-аккаунт Telcell. Добавьте реквизиты в разделе "Провайдеры", затем включите провайдера для конкретного домена. Провайдер, который сохранен, но не активирован ни для одного верифицированного домена, означает, что покупатели все еще не могут платить, и это самая частая причина, по которой запуск тихо проваливается.
Используйте "Проверить реквизиты" в разделе "Провайдеры", чтобы Paynet спросил у провайдера, работают ли еще ваши сохраненные реквизиты, вместо того чтобы узнать об этом от клиента.
У некоторых провайдеров есть собственные предварительные требования на своей стороне. Если ваш банк требует занести IP-адрес подключающегося сервера в белый список, Paynet показывает вам адрес для отправки, и платежи через этого провайдера не проходят, пока это не сделано.
4. Работающий webhook
Установите URL webhook для домена или отправляйте callback_url при создании платежа. Затем нажмите "Отправить тестовый webhook" в настройках webhook домена и убедитесь, что журнал доставки показывает успех.
Ваш обработчик должен проверять HMAC заголовка X-Paynet-Signature по необработанному телу запроса, отвечать 200 в течение 10 секунд, исключать дубли по delivery_id, а затем считывать платеж через эндпоинт статуса заказа, прежде чем отмечать что-либо оплаченным. Неудачные доставки повторяются через 1, 5 и 30 минут.
5. Один реальный платеж, совершенный вами
Прежде чем о чем-либо объявлять, купите что-нибудь в собственном магазине реальной картой на небольшую сумму, а затем верните деньги. Это единственный тест, который задействует ваш реальный договор с банком.
Проверьте всю цепочку: платеж показан как завершенный, ваш заказ перешел в статус оплаченного, webhook был доставлен, фискальный чек был выпущен, если вы используете e-HDM, а возврат прошел без проблем.
Пока вы этим занимаетесь: e-HDM
Если вы продаете потребителям в Армении, вам нужны фискальные чеки, и проще настроить это в первый же день, чем внедрять задним числом. Подключите свой e-HDM в панели управления, включите автоматические чеки, и каждый успешный платеж будет создавать чек со своим QR-кодом для проверки. Чеки для платежей, прошедших через Paynet, бесплатны.
Выпустите один ручной чек во время настройки и прочитайте его. Неверный налоговый режим приводит к юридически некорректным чекам, и настройка - это тот момент, когда это можно поймать.
Сколько стоит тестирование
Ничего. Тестовые платежи бесплатны и не ограничены, как для верифицированных, так и для неверифицированных аккаунтов. Неудачные платежи ничего не стоят, а возвраты бесплатны. Что касается реальных платежей, Paynet взимает 20 драм за каждый успешный платеж, платежи до 500 драм бесплатны, а каждый новый аккаунт начинает с 200 бесплатных транзакций и 500 бесплатных чеков, которые никогда не сгорают. См. страницу тарифов.
Что делать дальше
- Найдите свой тестовый ключ Default в панели управления или создайте его и поместите в переменную окружения.
- Установите провайдера Sandbox и включите его для своего домена.
- Прогоните шесть случаев выше, включая заброшенный платеж и дублирующий webhook.
- Верифицируйте свой домен, отправьте документы бизнеса и добавьте реальные реквизиты провайдера, пока идет проверка.
- Отправьте тестовый webhook, затем совершите один небольшой реальный платеж и верните деньги.
В руководстве для разработчиков есть краткий старт, а страница плагинов описывает путь без кода, если вы предпочитаете не строить интеграцию самостоятельно.
Idram, Telcell, ARCA и названия банков, упомянутые здесь, принадлежат своим владельцам. Paynet - независимый платежный шлюз.