Добро пожаловать на портал разработчиков Paynet! Наша платформа — это агрегатор поставщиков услуг и мерчантов, предоставляющий удобные способы приема платежей.
Мы предлагаем 3 варианта подключения. Воспользуйтесь диаграммой ниже, чтобы определить подходящий вариант.
| ✅ Универсальный биллинг | ⚙️ UWS Коннектор | 🔧 Кастомный коннектор | |
|---|---|---|---|
| Разработка | ❌ Не требуется | ✅ Нужна (JSON-RPC API) | ❌ Не требуется (делает Paynet) |
| Описание | Paynet сам собирает данные, принимает оплату и уведомляет мерчанта через Telegram-бот или Foyda. | Вы реализуете API по стандарту Paynet (GetInformation, PerformTransaction и др.). | Вы предоставляете свой существующий API, Paynet сам разрабатывает интеграцию. |
| Кому подходит | Мерчантам без ИТ-команды и своего API. | Компаниям с ИТ-инфраструктурой, готовым реализовать стандартизированный API. | Крупным корпоративным клиентам с устоявшимся API. |
| Автоматизация | Ручная (уведомления) | Полная (API-to-API) | Полная (API-to-API) |
✅ Универсальный биллинг — никакой разработки:
⚙️ UWS Коннектор — нужна реализация API:
serviceId (заполняется в анкете "Порядок технического взаимодействия")[!NOTE] Что такое
serviceId?serviceId— это статический внутренний идентификатор вашей услуги, который вы сами придумываете и передаете нам в документе "Порядок технического взаимодействия". Он НЕ является номером телефона или лицевым счетом клиента (эти данные передаются в массивеfields). Один партнер может предоставлять несколько услуг, иserviceIdпомогает Paynet понять, какую именно услугу оплачивает клиент.
| Модель | НЕ подходит, если... |
|---|---|
| Универсальный биллинг | Вам нужно автоматическое зачисление на баланс клиента, автоматическая отгрузка товара или интеграция с вашей ERP/CRM. В этом случае выбирайте UWS. |
| UWS Коннектор | У вас нет ИТ-команды или сервера для размещения API. В этом случае выбирайте Универсальный биллинг. |
| Кастомный коннектор | Вы стартап или малый бизнес без устоявшегося API и бизнес-объёмов. В этом случае выбирайте Универсальный биллинг или UWS. |
[!IMPORTANT] Архитектурная парадигма (Однонаправленность) Интеграция UWS работает по модели Push/Pull, где Paynet всегда выступает клиентом, а ваш биллинг — сервером. Вы не делаете запросов в сторону API Paynet. Все взаимодействия (включая проверки и отмены) инициируются исключительно со стороны серверов Paynet на ваш Endpoint.
Основной сценарий успешного платежа:
Сценарий 1: Network Timeout (Таймаут сети):
Сценарий 2: Отмена транзакции (CancelTransaction):
Paynet обрабатывает всю логику самостоятельно и только уведомляет мерчанта.
[!WARNING] Ошибки в этих пунктах — самая частая причина отказов на этапе тестирования.
UTF-8. Обязательно использование Content-Type: application/json и Accept: application/json.1000000.YYYY-MM-dd HH:mm:ss. Часовой пояс — GMT+5 (Узбекистан).[!CAUTION] Единственное исключение из формата дат: параметр
timestampв запросеCheckTransactionприходит в форматеEEE MMM dd HH:mm:ss z yyyy, напримерMon Jun 16 06:12:41 UZT 2021. Этот формат зафиксирован исторически (по нему уже работает множество поставщиков) и изменению не подлежит — ваш парсер обязан его поддерживать. Все остальные даты, включаяtimestampвCancelTransactionи все ответы вашего сервера, используют стандартный форматYYYY-MM-dd HH:mm:ss.
HTTP 401 Unauthorized (а не 200 OK с ошибкой).ChangePassword, Paynet обязан сменить пароль при первом успешном соединении с вашим биллингом. Если метод не реализован, пароль передается отдельно по любым безопасным каналам.213.230.106.112/28 и 213.230.65.80/28.Финансовые транзакции требуют строгой консистентности:
transactionId): Каждая транзакция от Paynet имеет уникальный transactionId. Биллинг партнера не должен допускать двойных списаний по одному и тому же transactionId: на дубликат возвращайте ошибку 201 — после нее Paynet вызовет CheckTransaction, чтобы узнать исходный результат. В случае сетевых сбоев Paynet может повторить запрос или вызвать метод CheckTransaction. В ответ на успешную операцию партнер возвращает свой внутренний номер providerTrnId.GetStatement для получения списка успешных платежей на вашей стороне и сверяет их со своей базой. Также на email партнера отправляется реестр принятых платежей.Спецификация доступна в файле OpenAPI (UWS).yaml. Она включает в себя описание всех JSON-RPC 2.0 методов: GetInformation, PerformTransaction, CheckTransaction, CancelTransaction, GetStatement, ChangePassword (необязательный), а также строгие JSON-схемы, коды ошибок и форматы.
Для начала приема платежей через универсальный коннектор (UWS), выполните следующие шаги:
GetInformation, PerformTransaction, CheckTransaction, CancelTransaction, GetStatement) согласно спецификации.Предоставьте менеджеру Paynet следующую информацию:
https://api.yourdomain.uz/uws)serviceId и их названийПеред запуском необходимо отработать стандартные тест-кейсы:
GetInformation): Эмуляция успешного поиска абонента и эмуляция ошибки 302 (Клиент не найден).PerformTransaction): Успешное пополнение баланса абонента.PerformTransaction): Эмуляция ошибки 413 (Неверная сумма) или 101 (Квота исчерпана).CancelTransaction): Проведение тестового платежа и его полная отмена. Возврат средств (частичные возвраты технически не поддерживаются). Эмуляция ошибок 77 (клиент уже израсходовал средства), 306 (отчетный период закрыт) и 203 (транзакция не найдена).CheckTransaction): Проверка статуса существующей транзакции (state 1) и несуществующей (state 3, успешный конверт — не ошибка). Обязательно проверьте парсинг timestamp в формате EEE MMM dd HH:mm:ss z yyyy.После успешного прохождения всех тестов подписывается акт технической готовности, и ваши сервисы становятся доступны для оплаты миллионам пользователей Paynet!
При возникновении бизнес-ошибки биллинг партнера возвращает JSON-RPC ответ с объектом error, содержащим code и message.
[!IMPORTANT] Все коды в этом разделе (
201,412,413и т.д.) — это коды ошибок Paynet уровня JSON-RPC, а не HTTP-статусы. Их часто путают с HTTP-кодами: на самом деле они возвращаются внутри объектаerrorв теле ответа, при этом сам HTTP-статус ответа остаётся200 OK. Единственное исключение — аутентификация: при неверных логине/пароле возвращаетсяHTTP 401 Unauthorized(см. примечание об ошибке412ниже).
Используйте эту таблицу, чтобы понять, какую ошибку возвращать в зависимости от вашего бизнес-кейса:
| Бизнес-ситуация | Рекомендуемый код ошибки Paynet |
|---|---|
| Проблемы с клиентом / вводом данных | |
| Клиент ввел неверный номер устройства / лицевой счет | 301, 302, 304 (Номер/Клиент/Товар не найден) |
| Кошелек пользователя не идентифицирован | 113 |
Проблемы с услугами (serviceId) |
|
Передан несуществующий serviceId |
305 (Услуга не найдена) |
| Услуга временно не работает на вашей стороне | 100 (Услуга временно не поддерживается) |
| Лимиты и суммы | |
| Сумма превышает максимальный лимит операции | 415 |
| Превышен дневной лимит клиента | 141 |
| Превышен ежемесячный лимит клиента | 140 |
| Клиент передал неверную сумму (не соответствует тарифу) | 413 |
| Бизнес-ограничения | |
| Клиент находится в вашем черном списке / запрет на оплату | 501 (Транзакции запрещены) |
| Отмена и статусы транзакций | |
| Paynet пытается отменить транзакцию, которая уже отменена | 202 (Транзакция уже отменена) |
| Paynet отменяет транзакцию, но клиент уже израсходовал средства | 77 (Недостаточно средств для отмены) |
| Вы отказываете в возврате: закрывающие документы сформированы, отчетный период закрыт (например, оплата в январе — возврат в марте) | 306 (Допустимое время отмены истекло) |
| Paynet отменяет транзакцию, которой не было | 203 (Транзакция не найдена) |
Paynet спрашивает статус (CheckTransaction) транзакции, которой не было |
Не ошибка! Верните result с transactionState: 3 |
Paynet присылает дубликат транзакции (PerformTransaction) |
201 (Транзакция уже существует) — далее Paynet вызовет CheckTransaction |
| Прочее | |
| Запрос с IP-адреса вне белого списка Paynet | 601 (Доступ запрещен) — лучше блокировать на уровне firewall |
| Неизвестное/неподдерживаемое значение команды | 603 (Неправильный код команды) |
| Не передан обязательный параметр сервиса | 411; ошибка конкретного параметра — 401–410 (нумерация параметров определяется вашим сервисом и фиксируется в анкете) |
| Дата/время в нераспознаваемом формате | 414 |
[!NOTE] Об ошибке
412(Неверный логин или пароль): аутентификация выполняется исключительно на уровне HTTP — при неверных учетных данных возвращайтеHTTP 401 Unauthorized, а не JSON-RPC ошибку. Код412— легаси из ранних версий протокола, в новых интеграциях не используется.
| Код ошибки Paynet | Описание |
|---|---|
| 0 | Проведено успешно |
| 77 | Недостаточно средств на счету клиента для отмены платежа |
| 100 | Услуга временно не поддерживается |
| 101 | Квота исчерпана |
| 102 | Системная ошибка |
| 103 | Неизвестная ошибка |
| 113 | Кошелёк не идентифицирован |
| 140 | Превышен ежемесячный лимит для данного аккаунта |
| 141 | Превышен дневной лимит для данного аккаунта |
| 201 | Транзакция уже существует |
| 202 | Транзакция уже отменена |
| 203 | Транзакция не найдена |
| 301 | Номер не существует |
| 302 | Клиент не найден |
| 304 | Товар не найден |
| 305 | Услуга не найдена |
| 306 | Допустимое время отмены транзакции истекло (отчетный период закрыт — партнер отказывает в возврате) |
| 401 - 410 | Ошибка валидации параметра 1 - 10 |
| 411 | Не заданы один или несколько обязательных параметров |
| 412 | Неверный логин или пароль |
| 413 | Неверная сумма |
| 414 | Неверный формат даты и времени |
| 415 | Сумма превышает максимальный лимит |
| 501 | Транзакции запрещены для данного плательщика |
| 601 | Доступ запрещен |
| 603 | Неправильный код команды |
Ошибки протокола JSON-RPC:
| Код ошибки | Описание |
|---|---|
| -32300 | Ошибка возникает в том случае, если метод запроса не POST |
| -32700 | Ошибка парсинга JSON (в ответе допускается "id": null) |
| -32600 | В RPC-запросе отсутствуют обязательные поля или неверный тип |
| -32601 | Запрашиваемый метод не найден |
| -32602 | Отсутствуют обязательные поля параметров (уровень протокола; бизнес-аналог — 411) |
| -32603 | Системная (внутренняя ошибка) |
[!NOTE] Код
0(«Проведено успешно») — значение статуса, оно никогда не возвращается внутри объектаerror.
| Дата | Версия | Изменения |
|---|---|---|
| 01.04.2022 | 1.0 | Первоначальная версия спецификации UWS |
| 20.09.2022 | 1.1 | Обновленная версия |
| 28.11.2023 | 3.3 | CheckTransaction: параметр времени — timestamp |
| 07.05.2025 | 3.4 | CheckTransaction: уточнен формат timestamp (EEE MMM dd HH:mm:ss z yyyy). Актуальная версия |
Портал и OpenAPI-спецификация соответствуют UWS v3.4 от 07.05.2025 с уточнениями core-команды Paynet: добавлен код ошибки 306 (допустимое время отмены истекло), зафиксировано требование TLS v1.3, поле status в ответе GetInformation подтверждено как обязательное.