Единый интерфейс HTTP + JSON, подпись и проверка по SHA-256, асинхронные уведомления и самостоятельный запрос статуса заказа. В этом документе описаны правила подписи, все поля API и примеры запросов.
India Payme предоставляет мерчантам два ключевых типа операций: приём платежей (Payin) — получение средств от конечных пользователей от имени мерчанта; выплаты (Payout) — перевод средств на указанный счёт от имени мерчанта. Все внешние методы работают по протоколу POST + JSON и обязательно требуют API-подписи. После обработки платформа уведомляет мерчанта через асинхронное уведомление, а также поддерживает самостоятельный запрос статуса заказа.
| Возможность | Метод | Путь |
|---|---|---|
| Создание платежа (приём) | POST | /transaction/payin/v1/apply |
| Запрос статуса платежа (приём) | POST | /transaction/payin/v1/query |
| Создание выплаты | POST | /transaction/payout/v1/apply |
| Запрос статуса выплаты | POST | /transaction/payout/v1/query |
| Запрос баланса | POST | /transaction/payout/v1/balance |
Базовый адрес (домен продуктивного шлюза предоставляется платформой после открытия счёта):
Войдите в личный кабинет мерчанта → раздел «Ключи приложения»: у каждого приложения есть пара учётных данных — appKey и appSecret. При этом appKey используется как заголовок запроса appId; appSecret — это ключ подписи, который применяется только для локального вычисления подписи и никогда не передаётся по сети.
Все запросы должны содержать следующие HTTP-заголовки, Content-Type — application/json:
| Header | Обязательно | Описание |
|---|---|---|
appId | Да | ID приложения мерчанта (то есть appKey) |
timestamp | Да | Unix-время в миллисекундах |
nonce | Да | Случайная строка, ≥10 символов, одноразовая, повторное использование запрещено |
sign | Да | Подпись, рассчитанная по правилам из следующего раздела |
Алгоритм подписи — чистый SHA-256 (в нижнем регистре, шестнадцатеричный), а не HMAC. appSecret добавляется непосредственно в конец подписываемой строки, после чего вычисляется SHA-256. Шаги:
appId, timestamp, nonce в единый Map (сам sign в этом не участвует);key1=value1&key2=value2…;appSecret и вычислите SHA-256 всей строки (в нижнем регистре, шестнадцатеричный) — это и есть sign.Срок действия и защита от повторов:
|время сервера − timestamp| ≤ 30s, при превышении возвращается timestamp has expired. Убедитесь, что часы клиента и шлюза синхронизированы (NTP).nonce has been used (код ошибки 900).Пример подписи на Node.js:
POST /transaction/payin/v1/apply —— создаёт заказ на приём платежа и возвращает ссылку на кассу payUrl, по которой пользователь завершает оплату.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
merchantOrderNo | string | Да | Номер заказа мерчанта, не должен повторяться |
amount | number | Да | Сумма заказа, десятичное число (например, 100.02) |
name | string | Да | Имя пользователя. Только латиница, ≥3 буквы, пробелы допускаются, без символов и цифр |
phone | string | Да | Номер телефона |
email | string | Да | |
currency | string | Да | Валюта: INR / PKR / USDT / BDT |
product | string | Да | Код платёжного продукта, предоставляется платформой согласно договору |
notifyUrl | string | Нет | Адрес асинхронных уведомлений; если не указан, используется адрес по умолчанию для мерчанта |
returnUrl | string | Нет | Страница перенаправления после успешной оплаты |
payType | string | Нет | Способ прямой оплаты через кошелёк: JAZZCASH / EASYPAISA / BKASH / NAGAD |
После получения payUrl перенаправьте пользователя для оплаты; окончательный результат определяется асинхронным уведомлением.
POST /transaction/payout/v1/apply —— инициирует выплату на указанный счёт. Асинхронная обработка: сначала выполняется проверка счёта и блокировка средств, затем платформа асинхронно подбирает канал для выплаты; в ответе обычно возвращается payStatus=0 (заявка принята), а итоговый статус определяется по запросу или уведомлению.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
merchantOrderNo | string | Да | Номер заказа мерчанта |
amount | number | Да | Сумма выплаты, минимум 100.00 |
accountName | string | Да | Имя получателя. Только латиница, ≥3 буквы, пробелы допускаются |
account | string | Да | Номер счёта получателя |
phone | string | Да | Номер телефона |
email | string | Да | |
currency | string | Да | Валюта: INR / PKR / USDT / BDT |
bizCode | string | Да | Тип операции выплаты: IMPS / UPI / BANK / JAZZCASH / EASYPAISA / BKASH / NAGAD / ECARD |
payCode | string | Да | Способ выплаты: CARD / WALLET / NBK / ITT / VC |
branchCode | string | Да | Клиринговый код: для Индии — IFSC; для Пакистана — bankcode; для Бангладеш — согласно bizCode |
product | string | Да | Код платёжного продукта для выплаты, предоставляется платформой |
bankName | string | Нет | Название банка |
swiftCode | string | Нет | SWIFT-код (используется при международном переводе ITT) |
Для приёма — POST /transaction/payin/v1/query, для выплат — POST /transaction/payout/v1/query. Заказ определяется по merchantOrderNo или orderNo. Ограничение: 5 запросов в секунду.
POST /transaction/payout/v1/balance —— запрос баланса счёта мерчанта. Ограничение: 5 запросов в секунду.
Когда заказ переходит в конечный статус, платформа отправляет POST-уведомление (JSON) на notifyUrl мерчанта (если не указан — используется адрес по умолчанию), вместе с теми же заголовками подписи (appId/timestamp/nonce/sign). Мерчант должен пересчитать подпись по тем же правилам с использованием собственного appSecret и сверить её, чтобы подтвердить подлинность уведомления.
Уведомление о приёме платежа содержит: merchantOrderNo, orderNo, currency, product, amount, realAmount, status (значение "1" означает успешный приём). Уведомление о выплате дополнительно содержит utr (номер банковской транзакции) и statusDes (описание статуса); status принимает значения "1" — успех / "2" — ошибка.
Мерчант обязан вернуть простой текст OK или success (без учёта регистра). В противном случае платформа поставит уведомление в очередь повторной отправки: не более 5 попыток с увеличивающимся интервалом в минутах (1 / 2 / 5 / 10 / 30 / 60 / 120). Поэтому обработчик на стороне мерчанта должен быть идемпотентным (один и тот же orderNo может быть отправлен повторно).
При интеграции ориентируйтесь на приведённые ниже внешние статусы (внутренняя логика статусов более детализирована и напрямую не раскрывается):
| Сценарий | Поле | Значения |
|---|---|---|
| Ответ на создание заказа | payStatus | 0 создан / 1 успех / 2 ошибка / 3 отменён |
| Запрос статуса приёма | payStatus | 0 в обработке / 1 оплачено / -1 отменено |
| Запрос статуса выплаты | payStatus | 0 ожидает выплаты / 1 выплачено / -1 отменено |
| Асинхронное уведомление | status | приём — успех "1"; выплата — "1" успех / "2" ошибка |
Если в теле ответа code != 0, запрос завершился ошибкой, а msg содержит пояснение. Часто встречающиеся коды ошибок:
| code | Описание |
|---|---|
0 | Успех |
400 | Ошибка параметров / ошибка проверки подписи (Sign invalid) |
900 | Повторный запрос / повтор nonce |
10000 / 10001 | Приложение не найдено / приложение недоступно |
10002 | Валюта не поддерживается |
10003 / 10007 | Мерчант недоступен / счёт мерчанта недоступен |
10004 | Продукт не подключён либо истёк срок договора |
10005 / 10009 | Нет доступных каналов / канал временно недоступен |
10008 | Недостаточно средств на счёте |
10010 | IP-адрес отсутствует в белом списке |
10011 / 10012 | Недействительный продукт / недействительный способ оплаты |
10020 | Номер заказа мерчанта уже используется |
30001 / 30002 | Неверный номер заказа / неверная валюта либо счёт не активирован |
На примере приёма платежа:
timestamp (в миллисекундах) и nonce (случайная строка ≥10 символов).sign согласно разделу «Правила подписи».POST /transaction/payin/v1/apply с 4 заголовками подписи и телом JSON.code==0, возьмите data.payUrl и перенаправьте пользователя для оплаты.OK.Примечание: пути методов, поля и коды статусов в этом документе соответствуют продуктивной реализации; домен продуктивного шлюза, доступные коды продуктов product и политика белого списка IP предоставляются платформой после открытия счёта.
Откройте счёт онлайн, чтобы получить тестовые учётные данные и коды продуктов; после успешного тестирования в песочнице переключение на продуктив выполняется одним действием.