Ввод
Внимание!
Данный способ интеграции является НЕ рекомендуемым, если Вы ранее не интегрировали похожие платежные решения, требующие активации. Рекомендуемый способ интеграции.
При выборе интеграции по API, мы рекомендуем дополнительно провести следующие доработки:
- Добавить под каждую ПС подсказки в текстовом виде для пояснения пользователю всех шагов оплаты.
- Добавить визуальное пояснение процесса оплаты - gif-ки с отображением процесса и скриншоты шагов оплаты.
- Скриншоты и всю необходимую минимально текстовую информацию информацию можно получить напрямую от ТП Paykassma.
PLUGINAPI_SECRET - строка секретного ключа. Ее необходимо будет добавлять ко всем запросам в виде get-параметра secret.
Например: https://api.{URL_сервера_Paykassma}/api/v1/deposit-info?secret=pluginapi_secret
При отправки запроса без использования данных параметров, будет выдаваться ошибка 404 'Не найдено'
Получение доступных ПС
https://api.{URL_server_Paykassma}/api/v1/payment-systems/available
Request method: GET
Format: JSON
Parameters:
Параметр | Тип | Обязательность | Описание |
currency_code | string[] (3) | ДА | Массив состоящий из кодов валют. Отобразятся ПС работающие по указанным валютам |
label | string (190) | ДА | Уникальный идентификатор (ID) пользователя, осуществляющего платеж |
{ "currency_code": [ "USD", "INR" ], "label": "55" }
{ "status": "ok", "params": { "gif_guide": { "upi_ib": "http:\/\/api.pay.test\/storage\/guide-image\/upi.mp4?cache=1587635151", "phonePe": "http:\/\/api.pay.test\/storage\/guide-image\/phonePe.gif?cache=1589958899", "bkash": "http:\/\/api.pay.test\/storage\/guide-image\/bkash.mpg?cache=1611553163" }, "currency_data": [ { "code": "INR", "symbol": "₹" } ], "wallets": [ { "type": "paytm", "currency_code": "INR", "order": 5, "logo": "http:\/\/api.pay.test\/storage\/payment_system\/logos\/paytm_default.svg", "name": "PayTM" }, { "type": "paytm", "currency_code": "INR", "order": 5, "logo": "http:\/\/api.pay.test\/storage\/payment_system\/logos\/paytm_34.svg", "name": "paytm", "hints": [ { "type": "requisites_hint", "text": null }, { "type": "payment_hint", "text": null }, true ], "show_limits": true } ], "imps_ib": { "INR": { "min": "8000", "max": "560000" } }, "bkash": { "BDT": { "min": "100", "max": "1000000" } }, "upi_ib": { "INR": { "min": "20000", "max": "50000" } }, "paytm": { "INR": { "min": "100000", "max": "20000000" } }, "phone_pe": { "INR": { "min": "100", "max": "800000" } } } } }
{ "status": "fail" "message": "MESSAGE" }
Создание платежа
В данный момент существуют два типа запросов для создания платежа, в зависимости от необходимости активации платежа при проведении.
Внимание! Для получения полного списка ПС, для которых необходима активация, обратитесь в ТП Paykassma. ТП предоставят полные примеры запросов для доступных в данный момент ПС.
Для ПС, требующих активации платежа
1. Запрос по созданию платежа:
https://api.{{URL_server_Paykassma}/api/v1/transaction/create/{wallet_type}
Пример запроса ПС PayTM
https://api.{URL_server_Paykassma}/api/v1/transaction/create/paytm
Request method: POST
Format: JSON
Parameters:
Параметр | Тип | Обязательность | Описание |
currency | string (3) | ДА | Код валюты |
label | string (190) | ДА | Уникальный идентификатор пользователя, осуществляющего платеж |
{ "currency": "INR", "label": "eligendi" }
{ "status": "ok", "params": { "identifier": "6234234234" } }
{ "status": "fail" "message": "MESSAGE" }
2. Запрос для активации платежа:
https://api.{URL_server_Paykassma}/api/v1/transaction/activate
Request method: POST
Format: JSON
Parameters:
Параметр | Тип | Обязательность | Описание |
currency_code | string (3) | ДА | Код валюты |
wallet_type | string (190) | ДА | Значение из списка доступных ПС. |
label | string (190) | ДА | Уникальный идентификатор пользователя, осуществляющего платеж |
key1 | string (190) | ДА | Код, по которому происходит активация (Transiction_ID), полученный от пользователя |
amount | numeric | *required if | Сумма транзакции |
custom_transaction_id | string (190) | НЕТ | Идентификатор транзакции в системе Клиента |
{ "currency_code": "USD", "wallet_type": "paytm", "label": "55", "key1": "123-ABC-456-DEF" "custom_transaction_id": "123465477897" }
{ "status": "ok" }
{ "status": "fail" "message": "MESSAGE" }
*Для некоторых ПС, так же в запросе необходимо передать поле amount:
Платежная система | currency_code | wallet_type | label | key1 | amount | custom_transaction_id |
---|---|---|---|---|---|---|
IMPS IB/UPI IB | required | required | required | required | required | - |
Paytm | required | required | required | required | - | - |
PhonePe | required | required | required | required | required | - |
bKash | required | required | required | required | - | - |
Nagad | required | required | required | required | - | - |
Для ПС, не требующих активации платежа
Создание платежа:
https://api.{URL_server_Paykassma}/api/v1/payment/create/{payment_system}
Request method: POST
Format: JSON
Parameters:
Параметр | Тип | Обязательность | Описание |
language | string (2) | ДА | Язык интерфейса |
currency | string (3) | ДА | Код валюты |
bank | string (3) | ДА | Банк, через который осуществляется платеж |
amount | numeric (ограничена max. | ДА | Сумма платежа |
label | string (190) | ДА | Уникальный идентификатор пользователя, осуществляющего платеж |
redirect_url | url | ДА | URL страницы для редиректа после платежа |
custom_transaction_id | string (190) | НЕТ | Идентификатор транзакции в системе Клиента |
{ "language": "en", "currency": "USD", "bank": "MBB", "amount": "1000", "label": "55", "redirect_url": "https:\/\/google.com" "custom_transaction_id": "123465477897" }
{ "status": "ok" }
{ "status": "fail" "message": "MESSAGE" }
Информация о накоплениях
Для сохранения информации о транзакциях, сумма которых не превышает размер минимального депозита для конкретной платёжной системы, был реализован функционал накоплений. Транзакции пользователя (выборка по параметру label) копятся в системе и не зачисляются на счёт пользователя до тех пор, пока их сумма не достигнет минимального депозита этой платёжной системы. Постбек на сервер клиента отправится только после достижения суммы минимального депозита. До момента отправки postback транзакция не считается зачисленной на счёт.
В постбеке ввода, можно увидеть поле Stockpiling, в нем указана сконвертированная во все валюты сумма транзакций, участвующих в накоплении (одна и более транзакции). Конвертация осуществляется на основе открытых данных о курсах валют. Все валюты передаются с точностью до сотых долей, криптовалюты имеют 8 знаков в дробной части (стомиллионная точность). Так же в поле transactions передается информация о совершённых транзакциях, участвующих в накоплении (одна и более). Передается в виде массива.
Запрос на предоставление информации о накоплениях определенного пользователя
https://api.{URL_server_Paykassma}/api/v1/deposit-info
Request method: GET
Format: JSON
Parameters:
Параметр | Тип | Обязательность | Описание |
label | string (190) | ДА | Уникальный идентификатор пользователя, осуществляющего платеж |
wallet_type | url | ДА | Значение из списка доступных ПС. |
currency | string (3) | ДА | Код валюты |
code | string (190) | НЕТ | Название ручной платёжной системы. |
{ "label": "55", "wallet_type": "paytm", "currency": "UDS" }
{ "status": "ok" "stockpiling_sum": 0, "lacks_sum": 0, "minimum_deposit": 148 }
{ "status": "fail" "message": "MESSAGE" }
Вывод
Актуальный тип запросов для подключения выводов:
Для вывода денежных средств пользователем через доступные для Клиента платежные системы, необходимо:
- Единоразово передать ТП Paykassma URL-сервера, куда будут отправляться постбеки со статусом вывода.
- Отправить запросы на вывод (POST) по URL адресу, без использования "secret=pluginapi_secret " :
https://api.{URL_server_Paykassma}/v2/withdrawal/create
Request method:
POST
Format:
JSON
Каждый запрос на вывод подписывается signature, она формируется следующим образом:
Алгоритм формирования signature
- Инициализируется свой приватный ключ.
- Формируется массив с данными, которые будут захэшированы. Массив может быть многомерным.
- Элементы массива рекурсивно конкатенируются друг с другом через строку ":".
- Далее выделяется md5 hash полученной строки.
- Конкатенируется приватный ключ с hash строкой.
- Далее выделяется sha1 hash с полученной строки.
Пример формирования signature на php
$data = [ ... ]; $data['signature'] = generateSignature($data); // return fa0ee1e2acf7f898635ec417491381c0a4f9d35c //send $data like json ... function generateSignature(array $data) { $privateKey = 'yourprivatekey'; ksort($data); $implode = self::multiImplode( ':', $data); return sha1($privateKey . md5($implode)); } function multiImplode($glue, $array): string { $finArray = []; foreach ($array as $val) { $finArray[] = is_array($val) ? self::multiImplode($glue, $val) : $val; } return implode($glue, $finArray); }
Необходимые параметры для передачи в POST запросе
Наименование | Тип | Обязательность | Описание |
withdrawal_id | string(1-36) | optional | Идентификатор вывода, если параметр не передается, то система генерирует withdrawal_id |
payment_system | string | required | Платежная система |
amount | int | required | Дополнительные требования:
Кратность: Для ПС PayTM: amount кратно "10". |
currency_code | string(3) | required | Код валюты |
label | string | required | Label пользователя, для которого проводится вывод |
account_number | string | *required_if | Номер счета получателя Маска ввода: Для ПС PayTM: Цифры(10) (без международного кода +91) Для ПС UPI IB / IMPS IB: Цифры |
account_name | string | *required_if ПС = imps_ib, upi_ib,.... | Имя держателя счета |
account_email | string | *required_if ПС = bkash,... | Е-mail держателя счета |
payments_details.payments_method | string | *required_if | Способ оплаты |
payments_details.payments_provider | string | optional | Поставщик, который осуществляет электронный платеж, выбранным способом оплаты |
bank_details.bank_code | string | *required_if | Уникальный идентификатор присваиваемый центральным банком страны Маска ввода: Для ПС UPI IB / IMPS IB: IFSC code Буквы(4)Цифры(7). Подробнее: https://en.wikipedia.org/wiki/Indian_Financial_System_Code |
bank_details.branch_code | string | *required_if | Код филиала (отделения) банка |
bank_details.bank_code_in_payments_system | string | *required_if | Код банка в платежной системе, с которой осуществляется обмен данными |
account_type | string | *required_if | Тип аккаунта |
document_type | string | *required_if | Тип документа |
document_id | string | *required_if | Идентификатор документа получателя |
account_digit | string | *required_if | Цифра счета |
iban | string | *required_if | IBAN |
Обязательные поля для ПС Bkash, PayTm, IMPS IB/UPI IB:
Платежная система | account_number | account_name | account_email | payments_details | bank_details | |||
---|---|---|---|---|---|---|---|---|
payments_method | payments_provider | bank_code | branch_code | bank_code_in_payment_system | ||||
Bkash | required | - | required | - | - | - | - | - |
IMPS IB/UPI IB | required | required | - | - | - | required | - | - |
Paytm | required | - | - | - | - | - | - | - |
Request:
{ 'withdrawal_id': '1234567', 'payment_system': 'paytm', 'amount' : '1000', 'currency_code': 'INR', 'label': '55', 'comment': 'withdrawal', 'account_number': '11111111', 'signature':'fae51673a8a9c85f724317214bd0bcc665ebc799' }
{ 'status': 'ok' }
{ 'status': 'fail' 'message': 'MESSAGE' }
После обработки вывода, Paykassma пришлет постбек о результате вывода с определенным статусом, подписанной сигнатурой
Статусы выводов
Статус | Описание |
---|---|
PROCESSED (1) | Статус для вывода, когда заявка на вывод была успешно обработана |
REJECTED (5) | Статус для вывода, когда заявка на вывод была отклонена |
Устаревшие запросы для вывода:
Данный раздел описывает устаревший тип подключения. При подключении необходимо использовать актуальный тип подключения к выводам.
API url:
https://api.{URL_server_Paykassma}/withdrawal/manual/create
Необходимые параметры для передачи в POST запросе
Внимание: При передаче данных не должно быть пробелов в начале и конце параметров в JSON файле
Параметр | Тип данных | Описание |
wallet_type | text(191) Выбор из доступного списка | Тип платежной системы |
wallet_recipient | string(191) | Кошелек получателя, на чей счет будет совершенна выплата Внимание! wallet_recipient (Для метода Paytm) должен содержать номер кошелька Paytm без международного кода +91 |
wallet_sender | string(191) | Кошелек отправителя, с чьего счета будет снятие денежных средств. Конечный выбор отправителя остается за Paykassma. Внимание: в текущей реализации необходимо заполнить поле произвольными четырьмя цифрами |
account_name | string(191) | Имя держателя банковского аккаунта |
account_number | string(191) | Номер банковского аккаунта |
string(191) | Электронная почта того, кому выплачивают | |
amount | double | Сумма вывода, в случае с PayTm, принимается сумма кратная 10! |
withdrawal_id | integer | ID вывода на стороне клиента (возвращается в постбеке). |
Пример тела запроса:
{ "wallet_type":"paytm", "wallet_recipient":"123123232", "wallet_sender":1111, "email":"[email protected]", "amount":1000, "withdrawal_id":"13", "signature":"fae51673a8a9c85f724317214bd0bcc665ebc799" }
При отправки к Paykassma запроса на вывод, в первом ответе получаете сформированные данные по заявке, без сигнатуры следующего вида:
Пример данных ответа:
{ "id":1, "wallet_type":"paytm", "wallet_recipient":"123123232", "wallet_sender":"1111", "email":"[email protected]", "amount":1000, "status":1, "created_at":"2020-07-08 07:06:06", "updated_at":"2020-07-08 09:40:39" }
Статус | Описание |
CANCELED (2) | Статус для вывода, когда он был отклонён на стороне ПС |
NEW (0) | Новый статус для вывода, с момента принятия заявки на вывод, до момента, когда будет обработана модератором(принята или отклонена) |
PROCESSED (1) | Статус для вывода, когда заявка на вывод была успешно обработана |
Вторым ответом уже придет постбек о результате вывода, подписанной сигнатурой.