Payment
- The user scans the QR code or follows the link.
- The user is redirecting to the mobile app, where he makes a payment.
- Paykassma sends a postback to the merchant's side.
- Funds are credited to the user’s balance on the merchant platform.
Payment window integration (plugin)
Example of a link to open a UPI S payment window:
https://plugin.{server_URL}/? label =label ¤cy_code =INR &lang =en &wallet_type =upi_s &custom_transaction_id=custom_transaction_id |
---|
wallet_type=upi_s currency_code=INR Available languages (lang): en, hi (Hindi)
Pay attention to the description of the parameters payment_url_success_id / payment_url_fail_id/ payment_url_pending_id and success_url / fail_url / pending_url.
To use payment_url_success_id / payment_url_fail_id / payment_url_pending_id you need to send the URLs to Paykassma support and use the received IDs in the parameters.
To use success_url / fail_url / pending_url you must use hashing URLs ( For more details on hashing click here ).
For the description of all the plug-in parameters click here.
API integration
Creating payment
User can choose the payment method:
- Scan the Qr code and pay in the app.
- Follow the link (only in the mobile version) to the mobile application and pay there.
URL: http://api.{server_URL}/api/v1/payment/create/upi_s?secret={pluginapi_secret}
Request method:
POST
Format:
JSON
Parameters:
Name | Type | Required | Description |
mode | string | yes | "upi_collect_qr". |
amount | float | yes | Amount of payment. |
currency | string | yes | Currency code. |
label | string | yes | The unique identifier (ID) of the user who makes the payment. |
wallet_type | string | yes | "upi_s". |
custom_transaction_id | string | yes | Transaction ID in the Client's system. Must be unique. |
secret | string | yes | API access key. |
{ "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": "iVBORw0KGgoAAAANSUhEUgAAALwAAAC8CAYAAADCScSrAAAAAklEQVR4AewaftIAAAnmSURBVO3BQY4cy5LAQDLR978yR0uHFvEQqJK+Bulm9gtrvcTDWi/ysNaLPKz1Ij/8RuVvqjhROamYVKaKT6icVJyoTBWTylRxojJVTCpTxaQyVUwqU8UNlaliUvmbKqaHtV7kYa0XeVjrRX74DxXfpPKJipOKSWWqmFROKk5UpopPqNxQOVGZKiaVqWJSmSomlaniRsU3qZw8rPUiD2u9yMNaL/LDJZUbFTdUpopJZao4qTipmFQmlZOKSWWquFFxQ+WGylTxL1G5UXHjYa0XeVjrRR7WepEf/jEVn1A5qbhRMalMKlPFicqJyknFVDGpTBU3VD6hMlX8Sx7WepGHtV7kYa0X+eEfozJVnKh8QmWquFExqfxJKicVk8pJxQ2V/88e1nqRh7Ve5GGtF/nhUsXfpDJV3FA5qbhRMamcVNxQmSomlROVqeJGxaQyVfxJFX/Sw1ov8rDWizys9SI//AeV/6WKSWWqmFSmikllqphUpopJZaqYVE5UpopPVEwqJypTxaQyVUwqU8WkMlWcqPxND2u9yMNaL/Kw1ovYL/w/ovI3VUwqNypuqEwVJypTxaQyVdxQmSpOVKaKf8nDWi/ysNaLPKz1Ij/8B5Wp4kRlqphUpopJ5UbFpDJVnKjcqJhUTlS+SeVGxYnKVHGiclIxqUwVk8pJxaQyVdx4WOtFHtZ6kYe1XsR+YVA5qThRmSo+ofJNFScqU8UnVD5RMalMFZPKVDGp3Kg4UfmmiknlpOLGw1ov8rDWizys9SI/XFK5oXKj4qTiROWGyg2VqeKkYlKZKiaVGyqfqJhUJpWTihOVT1R808NaL/Kw1os8rPUiP/ym4kTlpGJSmSomlZOKSeVGxSdUTlROKqaKb6q4UXGjYlK5UXGi8k0qU8X0sNaLPKz1Ig9rvcgPv1GZKqaKSeWGyicqJpWp4kTlRsWk8gmVqWKquKEyVdxQuVFxQ+WkYlI5qTipOHlY60Ue1nqRh7Ve5If/oDJVnKhMFScqk8pJxScqJpWpYlKZKr5J5aTipGJS+SaVGxWfqDhRmSomlalieljrRR7WepGHtV7kh99UnKjcUPkmlROVqeJPUrlRcaIyqUwVNyomlanihspUcaNiUpkqJpWp4qTi5GGtF3lY60Ue1noR+4VBZaq4oXJSMalMFZPKScWkMlXcUJkqJpWTikllqphUblTcUJkqJpWTihsqU8WfpDJVnDys9SIPa73Iw1ovYr9wQeVGxaQyVUwqU8WfpHKjYlKZKk5Upoq/SeWbKm6oTBU3VG5UTA9rvcjDWi/ysNaL2C8cqEwVk8pUcUNlqjhRuVFxojJVTCqfqDhRmSomlaliUpkqJpWp4kTlpOJEZaqYVKaKv+lhrRd5WOtFHtZ6kR8uqUwVk8pUMal8omJSmSr+JSqfqJhUTlRuqEwV36RyovJNFScPa73Iw1ov8rDWi/zwHypOVKaKSWWquKFyUnGiclIxqUwVk8pUcaIyVUwqJyrfpHKiMlVMKlPFScWJylQxqZxUTCpTxfSw1os8rPUiD2u9iP3CoDJVTCpTxaTyTRWTylQxqXxTxQ2VP6liUvlExaQyVdxQ+aaKSWWquPGw1os8rPUiD2u9yA//QWWquFFxQ+WkYlI5qZhUTiomlaliUjmpuKEyVZxUTCpTxaQyqfxJFTdUJpUTlani5GGtF3lY60Ue1nqRHz6kckNlqjhRmSqmikllUrmhMlVMKlPFpHKiMlV8U8WkMlXcUJkqPqEyVZxUfNPDWi/ysNaLPKz1Ij/8pmJSOamYVE4qvknlRsUnKiaVGxU3VD5RMancqJhUpoobFd+kMlWcPKz1Ig9rvcjDWi/yw29UbqicqHyTyknFpHKicqPihsqfVDGpTCpTxYnKScUNlU+oTBWfeFjrRR7WepGHtV7kh99UTCqTylQxqZxU/C+pTBWTyjdVTCpTxYnKN6lMFScqU8WkMlWcqJxUnKhMFZPKVDE9rPUiD2u9yMNaL2K/MKhMFScqU8WkclJxonKj4kTlpOJE5aTiROWk4k9SmSpOVKaKSeVGxaQyVUwqU8UnHtZ6kYe1XuRhrRf54TcVk8oNlanihspUcaJyovI3qdyo+JNUpopJZao4UTmpOFGZKiaVP+lhrRd5WOtFHtZ6kR8+VHFDZaqYKiaVqWKqmFSmiknlROWkYlKZKk5UTlRuVJxUnFTcqJhUJpWp4hMVN1SmiulhrRd5WOtFHtZ6kR9+ozJV3FA5qZhUpoqp4psqbqh8QmWqOKmYVKaKE5VvqrhRMalMFZPKVDGpTBWTylRx8rDWizys9SIPa73ID/9BZaqYVE4qJpUbKlPFpDJVnKicVEwVk8pUcVIxqUwVk8pUcaNiUjmp+CaVqeKkYlKZKr7pYa0XeVjrRR7WepEfflNxo+JEZaqYVP6XKiaVk4pvUrmhMlXcqPiEylRxQ2WqmCpuVNx4WOtFHtZ6kYe1XuSHL1OZKiaVT6hMFTcqJpWpYlKZVKaKT1RMKjdUpoqpYlKZKiaVqeITKlPFpDJVnKhMFZPKVDE9rPUiD2u9yMNaL/LDb1ROKiaVqeKkYlL5hMpJxaTyiYpJ5aTiEypTxQ2VE5UTlW9SmSo+oTJVnDys9SIPa73Iw1ovYr/wRSpTxaRyUvFNKlPFJ1ROKm6onFTcUJkqJpVPVJyoTBU3VD5RcfKw1os8rPUiD2u9yA//QeWbKiaVSWWqOFE5qThROamYKiaVE5WpYqq4oXJScVIxqdxQmSr+popPPKz1Ig9rvcjDWi9ivzCoTBUnKicVk8onKm6oTBUnKv+Sikllqrih8k0Vk8o3VZyonFRMD2u9yMNaL/Kw1ovYL/xDVKaKGypTxSdUPlFxQ+Wk4obKN1WcqEwVN1RuVEwqU8X0sNaLPKz1Ig9rvcgPv1H5myqmihOVqeITKlPFVHFD5URlqjip+JMqTlS+SWWqOKk4UZkqTh7WepGHtV7kYa0X+eE/VHyTyg2VGxWTyjepTBU3Km6o3KiYKm6onKh8ouJ/6WGtF3lY60Ue1nqRHy6p3Ki4ofJNFScqNypuqHyiYlL5hMqNihsqk8o3qUwVNx7WepGHtV7kYa0X+eEfU/EJlRsVJypTxaRyUnGi8omKE5Wp4kRlUpkqTiomlaniROWGyknF9LDWizys9SIPa73ID//PqEwVJxWTyonKjYpPVJyoTBWTyr+sYlKZKk5UTipuPKz1Ig9rvcjDWi/yw6WKP0nlExUnFZPKVDGpTConFX+Syp9UcaJyo2KqmFRuVHziYa0XeVjrRR7WehH7hUHlb6o4UTmpOFH5RMWkcqPiROUTFTdUpopJZaq4oXJS8QmVqWJSmSqmh7Ve5GGtF3lY60XsF9Z6iYe1XuRhrRd5WOtF/g9hC6vB+PmkFgAAAABJRU5ErkJggg==", "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 code generation
It is necessary to generate a QR code based on the data in "qr_data" obtained from the previous request:
upi://pay?pa=test@bank&pn=Test%20test&am=100&tn=IT32021661770570987&tr=IT32021661770570987
You can generate a QR code this way:
https://chart.googleapis.com/chart?chs=250x250&cht=qr&chl=<?php echo urlencode($qrstring); ?>&choe=UTF-8
The generated QR must be displayed to the user.
For mobile devices, you can display a link to go to the UPI mobile app to make the payment.
Take the universal link from the "qr_data" field.
For IOS mobile devices, if the universal link does not work, you can use the solution: https://stackoverflow.com/questions/65273125/invoking-upi-apps-from-my-react-native-app-works-in-ios-but-not-in-android, that is, for the specified mobile applications, enter the exact link → replacing “upi://” from the qr_data line with the following substring:
- Paytm → paytmmp://;
- Phonepe →phonepe://;
- GPay →tez://upi/
and universal link (upi://)
Checking payment status (Optional request)
URL: http://api.{server_URL}/api/v1/payment/upi_s/status?secret={pluginapi_secret}
Request method:
POST
Format:
JSON
Parameters:
Name | Type | Required | Max Length | Description |
order_id | string | yes | no limit | The order number received in response to the payment creation request (regardless of the payment method). |
{ "order_id": "029391c747902d94" }
{ "status": "success" }
{ "status": "processing" }
{ "status": "failed" }
If the payment is unsuccessful, the transaction is not created in the system, and no postback is sent to the client.
{ 'status': 'fail', 'message': 'MESSAGE' }
Deposit postback
For the general documentation on post backs click here.
Example of deposit postback for UPI S
{ "signature": "3f46dc3adfed87c65fa8f2be952927dbceffa100", "wallet_type": "upi_s", "amount": 700, "currency_code": "INR", "label": "2537232", "converted_amount": {"USD": 4.61, "INR": 380, "EUR": 4.2, "IDR": 69702.53, "MYR": 20.81, "VND": 109100.85, "SGD": 6.15, "THB": 158.07, "NGN": 3549.74, "TRY": 124.18, "AED": 16.92, "CAD": 6.11, "AUD": 6.96, "BDT": 500, "AFN": 392.19, "ALL": 427.25, "AMD": 1778.42, "AOA": 3803.37, "ARS": 1271.54, "AWG": 8.3, "AZN": 7.83, "BAM": 8.2, "BBD": 9.21, "BGN": 8.21, "BHD": 1.74, "BIF": 13046.47, "BMD": 4.61, "BND": 6.15, "BOB": 31.84, "BRL": 21.99, "BSD": 4.61, "BTC": 0.00015943, "BTN": 379, "BWP": 60.54, "BYN": 11.63, "BZD": 9.29, "CDF": 11425.29, "CHF": 4.04, "CLF": 0.14, "CLP": 3878.55, "CNH": 33.06, "CNY": 33.02, "COP": 18082.75, "CRC": 2498.95, "CUC": 4.61, "CUP": 118.58, "CVE": 462.56, "CZK": 100.38, "DJF": 820.28, "DKK": 31.27, "DOP": 259.16, "DZD": 624.77, "EGP": 142.3, "ERN": 69.08, "ETB": 253.82, "FJD": 10.22, "FKP": 3.6, "GBP": 3.6, "GEL": 11.9, "GGP": 3.6, "GHS": 52.22, "GIP": 3.6, "GMD": 276.31, "GNF": 39634.5, "GTQ": 36.22, "GYD": 963.87, "HKD": 35.89, "HNL": 113.34, "HRK": 31.62, "HTG": 628.87, "HUF": 1633.77, "ILS": 16.76, "IMP": 3.6, "IQD": 6035.32, "IRR": 194797.68, "ISK": 605.39, "JEP": 3.6, "JMD": 711.75, "JOD": 3.26, "JPY": 659.33, "KES": 657.15, "KGS": 404.25, "KHR": 19027.89, "KMF": 2061.95, "KPW": 4144.63, "KRW": 5933.82, "KWD": 1.42, "KYD": 3.84, "KZT": 2047.77, "LAK": 89252.61, "LBP": 69151.38, "LKR": 1469.64, "LRD": 858.4, "LSL": 81.95, "LYD": 22.02, "MAD": 45.38, "MDL": 82.35, "MGA": 20777.32, "MKD": 258.57, "MMK": 9674.75, "MNT": 15887.75, "MOP": 36.98, "MRO": 0, "MRU": 175.52, "MUR": 208.15, "MVR": 70.69, "MWK": 4853.1, "MXN": 77.35, "MZN": 293.46, "NAD": 82.25, "NIO": 168.55, "NOK": 47.01, "NPR": 606.4, "NZD": 7.49, "OMR": 1.77, "PAB": 4.61, "PEN": 16.61, "PGK": 16.59, "PHP": 252.72, "PKR": 1324.8, "PLN": 18.6, "PYG": 33513, "QAR": 16.79, "RON": 20.69, "RSD": 492.16, "RUB": 424.19, "RWF": 5413.13, "SAR": 17.28, "SBD": 38.44, "SCR": 61.28, "SDG": 2770, "SEK": 48.85, "SHP": 3.6, "SLL": 96567.61, "SOS": 2623.48, "SRD": 177.86, "SSP": 599.87, "STD": 102610.94, "STN": 102.67, "SVC": 40.31, "SYP": 11570.57, "SZL": 81.89, "TJS": 50.47, "TMT": 16.16, "TND": 14.19, "TOP": 10.82, "TTD": 31.29, "TWD": 145.48, "TZS": 11319.27, "UAH": 170.14, "UGX": 16716.57, "UYU": 173.55, "UZS": 53595.22, "VEF": 0, "VES": 135.74, "VUV": 546.73, "WST": 12.52, "XAF": 2752.15, "XAG": 0.19, "XAU": 0, "XCD": 12.45, "XDR": 3.43, "XOF": 2752.15, "XPD": 0, "XPF": 500.67, "XPT": 0, "YER": 1152.67, "ZAR": 83.54, "ZMW": 87.42, "ZWL": 1482.86, "ETH": 0.00251358, "LTC": 0.05065982, "DOGE": 59.80674641, "DASH": 0.14777208, "BCH": 0.01902045, "ZEC": 0.15475058, "ETC": 0.25289799, "XRP": 6.67674578, "TRX": 59.03020283, "XLM": 31.08030456, "WAVES": 2.42673726, "USDT": 4.60787289, "USDTTRC20": 0, "USDT20": 0}, "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": "" } ] }
The Paykassma server is waiting for a response in json {"status": "ok"} response code 200, otherwise, when receiving a different response, Paykassma will forward the postback with a certain frequency.
Repeated postbacks must also be answered with {"status":"ok"} response code 200.
Withdrawals for users
Payments to users are made by using IMPS method ( for more details on IMPS method click here).