Payment

  1. The user scans the QR code or follows the link.
  2. The user is redirecting to the mobile app, where he makes a payment.
  3. Paykassma sends a postback to the merchant's side.
  4. 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
&currency_code=INR
&lang=en
&wallet_type=upi_s
&custom_transaction_id=custom_transaction_id
&fixed_amount=fixed_amount
&payment_url_success_id=2
&payment_url_pending_id=3
&payment_url_fail_id=1
&success_url=hash
&fail_url=hash
&pending_url=hash


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_idpayment_url_pending_id and success_url / fail_url pending_url.
To use payment_url_success_id / payment_url_fail_idpayment_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_urlpending_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

yesAPI access key.
Request
{
    "mode": "upi_collect_qr",
    "currency": "INR",
    "label": "test_user55",
    "wallet_type": "upi_s",
    "amount": 100,
    "custom_transaction_id": "test_custom1234"
}


Response Success
{
    "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"
    }
}
Response Fail
{
    '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).

Request
{
    "order_id": "029391c747902d94"
}


Response Success
{
    "status": "success"
}


Response Success (Processing)
{
    "status": "processing"
}


Response Success (Payment Failed)
{
    "status": "failed"
}

If the payment is unsuccessful, the transaction is not created in the system, and no postback is sent to the client.

Response Fail (ошибка запроса)
{
    '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",
    "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).