Проверка интеграции
Тестового режима и тестового магазина у AvantPay нет. Все платежи настоящие, поле test всегда false.
Поэтому проверяйте интеграцию так: сначала всё, что можно проверить без денег, потом один настоящий платёж на минимальную сумму. Деньги за него можно вернуть в личном кабинете.
Все запросы и уведомления видны в личном кабинете: Ещё → Разработчикам → Логи запросов. Там же видно, что ответил ваш сервер на уведомление.
1. Ключи
curl "https://api.avantpay.io/v3/payments?limit=1" \
-u "$AVANTPAY_SHOP_ID:$AVANTPAY_SECRET_KEY"
Ответ 200 — ключи верные. Ответ 401 — неверный ID магазина или ключ.
2. Платёж без оплаты
Проверяет создание платежа, приём уведомления payment.canceled и запрос платежа. Денег не нужно.
-
Создайте платёж через свою интеграцию. Или командами ниже: первая строка создаёт ключ идемпотентности (работает в Linux и macOS).
KEY=$(uuidgen)
curl https://api.avantpay.io/v3/payments \
-X POST \
-u "$AVANTPAY_SHOP_ID:$AVANTPAY_SECRET_KEY" \
-H "Idempotence-Key: $KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": {
"value": "100.00",
"currency": "RUB"
},
"capture": true,
"confirmation": {
"type": "redirect",
"return_url": "https://example.com/orders/test"
},
"description": "Проверка интеграции",
"metadata": {
"email": "[email protected]",
"order_id": "test"
}
}' -
Откройте
confirmation.confirmation_urlи убедитесь, что страница оплаты открывается. Не платите. -
Дождитесь уведомления
payment.canceled. Срок оплаты — 20 минут после создания, он вexpires_at. Платёж отменяется не в ту же секунду послеexpires_at: сначала AvantPay проверяет, не прошла ли оплата. Обычноcanceledприходит в течение 10 минут послеexpires_at, в редких случаях — до 2 часов. -
Проверьте:
- ваш сервер получил уведомление, проверил подпись и ответил 200;
- запрос
GET /v3/payments/{payment_id}вернул"status": "canceled"; - заказ не выполнен.
3. Повтор запроса
Отправьте тот же запрос на создание платежа ещё раз — с тем же Idempotence-Key и тем же телом. Если создавали платёж командами выше, повторите только команду curl, без строки с KEY. В ответе должен быть тот же id. Значит, повтор после таймаута не создаст второй платёж.
4. Повтор уведомления
Временно сделайте так, чтобы ваш сервер ответил на уведомление кодом 500. Примерно через минуту AvantPay пришлёт его ещё раз. Убедитесь, что повторное уведомление не выполняет заказ второй раз.
5. Настоящий платёж
- Узнайте минимальную сумму в личном кабинете: Ещё → Способы оплаты.
- Создайте платёж на эту сумму и оплатите его сами — СБП или картой.
- Проверьте:
- пришло уведомление
payment.succeeded, ваш сервер ответил 200; - запрос
GET /v3/payments/{payment_id}вернул"status": "succeeded"; - заказ выполнен один раз, сумма платежа сверена с суммой заказа;
- покупатель вернулся на
return_urlи увидел правильный результат.
- пришло уведомление
- Верните деньги в личном кабинете: найдите платёж в разделе платежей и оформите возврат.
Если что-то не работает
| Что видно | Что проверить |
|---|---|
401 invalid_credentials | ID магазина и ключ. Не перевыпускали ли ключ. Запросы должны идти на https://api.avantpay.io/v3. |
403 forbidden | Включено ли у ключа право «Платежи». Если нет — напишите в поддержку. |
400 invalid_request | Поле из parameter. Описание — в description. Таблица ошибок — в справочнике: Создать платёж. |
400, "parameter": "metadata.email" | В запросе нет email покупателя или адрес неверный. Покупатель из Telegram — <id или username>@telegram.org. |
400, "parameter": "capture" | В запросе нет "capture": true. |
400 not_supported | В запросе поле, которого нет в API, например receipt. Уберите его. |
| 404 на любой запрос | Адрес. Правильно: https://api.avantpay.io/v3/payments. |
| Уведомления не приходят | Адрес и события в Ещё → Разработчикам → HTTP-уведомления. Адрес — https://, порт 443 или 8443, сертификат действующий. Запись об отправке — в Логах запросов. Платежи, созданные до того, как указан адрес, уведомлений не получат: проверьте их запросом GET /v3/payments/{payment_id}. |
| Сервер отклоняет уведомления | Подпись считается по строке <Signature-Timestamp>.<тело>, тело — как оно пришло, до разбора JSON. Часы сервера идут верно (допуск — 5 минут). |
В письме в поддержку ([email protected]) укажите id платежа, id ошибки из ответа и значение заголовка X-Request-Id.