Оплата
- Пользователь сканирует QR-код или переходит по ссылке.
- Пользователя редиректит в мобильное приложение, где он совершает оплату.
- Paykassma отсылает постбек на сторону мерчанта.
- Средства начисляются на баланс пользователя на платформе мерчанта.
Интеграция через платежное окно (plugin)
Пример ссылки на открытие платежного окна UPI_S:
https://plugin.{URL_сервера}/? label =label ¤cy_code =INR &lang =en &wallet_type =upi_s &custom_transaction_id=custom_transaction_id &payment_url_fail_id=1 |
---|
wallet_type=upi_s currency_code=INR Доступные языки (lang): en, hi (Хинди)
Обратите внимание на описание параметров payment_url_success_id / payment_url_fail_id / payment_url_pending_id и success_url / fail_url / pending_url
Для использования payment_url_success_id / payment_url_fail_id / payment_url_pending_id необходимо передать URL'ы саппорту Paykassma, и использовать полученные ID в параметрах.
Для использования success_url / fail_url / pending_url необходимо использовать хэширование URL'ов (подробнее про хэширование см. здесь).
Описание всех параметров плагина смотрите здесь.
Интеграция через клиентский API
Создание платежа
Пользователь может выбрать способ оплаты:
- Отсканировать QR код и оплатить в приложении.
- Перейти по ссылке (только в мобильной версии) в мобильное приложение и оплатить там.
URL: http://api.{URL_сервера}/api/v1/payment/create/upi_s?secret={ pluginapi_secret }
Request method:
POST
Format:
JSON
Parameters:
Name | Type | Required | Max Length | Description |
secret | string | yes | - | Ключ доступа. |
Body:
Name | Type | Required | Max Length | Description |
mode | string | yes | - | В данном случае значение = "upi_collect_qr". |
amount | float | yes | ограничена min и max. | Сумма платежа. |
currency | string | yes | 3 | Код валюты. |
label | string | yes | 190 | Это уникальный идентификатор (ID) пользователя, осуществляющего платеж. |
wallet_type | string | yes | не ограничен | Тип кошелька. В данном случае "upi_s". |
custom_transaction_id | string | yes | 190 | Идентификатор транзакции в системе Клиента. Должен быть уникальным. |
{ "mode": "upi_collect_qr", "currency": "INR", "label": "test_user55", "wallet_type": "upi_s", "amount": 100, "custom_transaction_id": "test_custom1234" }
{ "status": "ok", "data": { "order_id": "6a12ce38b3164c53", "qr_string": "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", "qr_data": "upi://pay?pa=test@bank&pn=Test%20test&am=100&tn=IT32021661770570987&tr=IT32021661770570987", "message": "QR Code generated successfully" } }
{ 'status': 'fail', 'message': 'MESSAGE' }
Генерация QR кода
Необходимо сгенерировать QR код на основе данных в "qr_data", полученных по предыдущего запроса:
upi://pay?pa=test@bank&pn=Test%20test&am=100&tn=IT32021661770570987&tr=IT32021661770570987
Генерировать QR код можно таким образом:
https://chart.googleapis.com/chart?chs=250x250&cht=qr&chl=<?php echo urlencode($qrstring); ?>&choe=UTF-8
Сгенерированный QR необходимо отобразить пользователю.
Переход в мобильное приложение
Для мобильных устройств можно отобразить ссылку для перехода в мобильное приложение UPI для выполнения платежа.
Универсальную ссылку брать из поля "qr_data".
Для IOS мобильных устройств в случае, если универсальная ссылка не будет работать, можно воспользоваться решением: https://stackoverflow.com/questions/65273125/invoking-upi-apps-from-my-react-native-app-works-in-ios-but-not-in-android, то есть для указанных мобильных приложений прописать точную ссылку → заменив "upi://" из строки qr_data на следующую подстроку:
- Paytm → paytmmp://;
- Phonepe →phonepe://;
- GPay →tez://upi/
и оставить для выбора универсальную ссылку.
Проверка статуса платежа (Необязательный запрос)
URL: http://api.{URL_сервера}/api/v1/payment/upi_s/status?secret={pluginapi_secret}
Request method:
POST
Format:
JSON
Parameters:
Name | Type | Required | Max Length | Description |
secret | string | yes | - | Ключ доступа. |
Body:
Name | Type | Required | Max Length | Description |
order_id | string | yes | не ограничен | Номер заказа, полученный в ответе на запрос создания платежа (вне зависимости от способа оплаты). |
{ "order_id": "029391c747902d94" }
{ "status": "success" }
В случае успешного выполнения платежа в системе будет создана подтвержденная транзакция, по которой клиенту будет отправлен постбек.
{ "status": "processing" }
{ "status": "failed" }
В случае неуспешного платежа в системе транзакция не создается, постбек по ней клиенту не отправляется.
{ 'status': 'fail', 'message': 'MESSAGE' }
Постбек депозита
Общую документацию по постбекам смотрите здесь.
Пример постбека для UPI S
Сервер Paykassma ожидает ответ в json {"status":"ok"} c кодом ответа 200. В противном случае, при получении отличающегося ответа Paykassma будет пересылать постбек с определенной периодичностью.
На повторные постбеки необходимо также отвечать {"status":"ok"} с кодом ответа 200.
Выводы / выплаты пользователям
{ "signature": "3f46dc3adfed87c65fa8f2be952927dbceffa100", "wallet_type": "upi_s", "amount": 700, "currency_code": "INR", "label": "2537232", "direction": "ingoing", "created_datetime": "2023-08-25 10:47:40", "access_key": "FQ9jMwrNSkFbyMNqYFf6Ed4xeKmjHK", "additional_data": [ { "activated_datetime": "2023-08-15 21:29:01", "exchanger_identifier": "s132nfinite0-4@okhdfcbank", "comment": "", "amount": "700", "currency_code": "INR", "wallet_type": "upi_s", "stockpiling_id": 1430926, "transaction_id": "322712363408", "transaction_type": 0, "plugin_custom_order_id": "qG7h123nud8AqUqn", "withdrawal_id": null, "withdrawal_status": null, "account_number": "", "account_name": "", "account_email": "", "bank_details": { "bank_code": "", "branch_code": "" } ] }