Все статьи
2 июня 2026 г. · 1 мин чтения

Подключите оплату Paynet за 15 минут

Пошаговое руководство для разработчика: возьмите тестовый API-ключ, создайте платеж, перенаправьте покупателя на страницу оплаты и проверьте webhook, с тестовыми картами, чтобы не тратить реальные деньги.

Это руководство проведет вас от нуля до работающего платежа примерно за пятнадцать минут. Вы создадите платеж, отправите покупателя на страницу оплаты и подтвердите результат через webhook, все в тестовом режиме, так что реальные деньги не двигаются.

1. Получите тестовый API-ключ

Каждый аккаунт Paynet начинается с тестового API-ключа с именем Default. Он находится в разделе API-ключи вашей панели управления, там же можно создать еще один. Тестовые ключи начинаются с sk_test_, и каждый платеж, созданный с таким ключом, является платежом sandbox: банк не задействуется, ничего не списывается, и подтвержденный домен пока не нужен.

2. Создайте платеж

Отправьте один запрос с суммой в армянских драмах, номером вашего заказа и адресом, куда вернуть покупателя:

curl https://paynet.am/api/v1/payments \
  -H "X-Paynet-Key: sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000,
    "currency": "AMD",
    "order_id": "ORD-1001",
    "return_url": "https://shop.am/return",
    "callback_url": "https://shop.am/webhooks/paynet"
  }'

Поле processor необязательно. Если его не передать, покупатель выберет способ оплаты на странице оплаты. В ответе есть checkout_url. Перенаправьте покупателя туда.

3. Используйте тестовые карты

На странице оплаты sandbox результат определяет номер карты:

  • 4111 1111 1111 1111 - одобрено
  • 4000 0000 0000 0002 - отклонено
  • 4000 0000 0000 0069 - недостаточно средств
  • 4000 0000 0000 0119 - тайм-аут процессора

Срок действия, CVV и имя держателя не проверяются, вводите что угодно.

4. Проверьте webhook

Когда платеж достигает финального статуса, Paynet отправляет подписанный POST-запрос на ваш callback_url. Paynet отправляет два события:

  • transaction.status.updated - платеж достиг финального статуса: completed, failed или expired.
  • payment.refunded - возврат выполнен. В этом случае тело также содержит объект refund.

Так выглядит завершенный платеж sandbox (сокращенно):

{
  "delivery_id": "...",
  "event": "transaction.status.updated",
  "livemode": false,
  "timestamp": "2026-06-02T09:00:00+04:00",
  "transaction": { "uuid": "...", "order_id": "ORD-1001", "status": "completed", "amount": 5000, "currency": "AMD" }
}

Принимайте решение по имени события и полю transaction.status, а не по отдельному событию на каждый исход. Сначала проверьте заголовок X-Paynet-Signature: это hex HMAC-SHA256 от исходного тела запроса, вычисленный с секретом webhook того сайта, на котором оформлен платеж (раздел «Сайты», кнопка webhook, «Показать секрет»). Для тестового платежа, пока у вас нет собственного подтвержденного сайта, это ваша платежная страница Paynet: m плюс номер вашего аккаунта .pay.paynet.am. Проверку подписи нельзя пропускать никогда. Затем отсейте дубликаты по delivery_id и перечитайте платеж через GET /api/v1/orders/{order_id}/payment, прежде чем отмечать заказ оплаченным.

5. Запуск

Для реальных платежей нужно несколько вещей: подтвержденный домен для return_url и callback_url, верифицированный бизнес и реальный провайдер (ARCA, Idram или Telcell), подключенный и включенный для этого домена. После этого замените тестовый ключ на боевой (sk_live_). Тот же код, который вы только что проверили, работает в production, переписывать ничего не нужно.