UPI Integration

Integrate TPV through UPI using the procedure described in this section.

Prerequisites

Merchant Hosted or S2S (Seamless) integration has to be done as per the standard kit. For more information, refer to UPI Integration.

Step 1: Validate VPA

When your customer makes payment through UPI, you can validate the customer’s Virtual Payment Address (VPA) and then initiate payment. The validateVpa API is used to validate the UPI handle. Validate the VPA (UPI handle) using the validateVpa API. For more information, refer to Validate VPA Handle API.


Step 2: Post the parameters to PayU

With the following parameters, make the transaction request with the customer’s bank account number to the PayU using the Collect Payment (_payment) API.

Environment

Request parameters

ParameterDescriptionExample
key
mandatory
StringMerchant key provided by PayU during onboarding. JPg***r
txnid
mandatory
StringThe transaction ID is a reference number for a specific order that is generated by the merchant. ypl938459435
amount mandatoryStringThe payment amount for the transaction. 10.00
productinfo mandatoryStringA brief description of the product. iPhone
firstname mandatoryString The first name of the customer.Ashish
email
mandatory
StringThe email address of the customer. [email protected]
phone
mandatory
StringThe phone number of the customer.
pg mandatoryString It defines the payment category for which you wish to perform TPV. For Net Banking, pg= ’UPI’.UPI
bankcode mandatoryString It defines the bank with which you wish to perform TPV using the bank code.The values can be any one of the following values:

- UPITPV: Used for UPI Collect
- INTTPV: : Used for UPI Intent
- TEJTPV: Used for Google Pay in app transactions only
UPI
vpa
mandatory
String The VPA or UPI handle of the customer.
beneficiarydetail
mandatory
This is a JSON format text and there should be key named beneficiaryAccountNumber with the list of account numbers and the ifscCode key with the list of corresponding IFSC codes (in the same order as provided in the beneficiaryAccountNumber key). You can post up to five account details in this parameter.Refer to beneficiarydetail JSON Object Fields
api_versionString The api_version β€œ6” must be passed fro this parameter.
furl
mandatory
StringThe success URL, which is the page PayU will redirect to if the transaction is successful.
surl
mandatory
StringThe Failure URL, which is the page PayU will redirect to if the transaction is failed.
hash
mandatory
StringIt is the hash calculated by the merchant. The hash calculation logic is:
sha512(key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5||||||SALT)
address1
optional
String The first line of the billing address.
For Fraud Detection: This information is helpful when it comes to issues related to fraud detection and chargebacks. Hence, it is must to provide the correct information.
address2
optional
String The second line of the billing address.
city
optional
String The city where your customer resides as part of the billing address.
state
optional
String The state where your customer resides as part of the billing address,
country
optional
String The country where your customer resides.
zipcode
optional
String Billing address zip code is mandatory for the cardless EMI option.
Character Limit-20
udf1
optional
String User-defined fields (udf) are used to store any information corresponding to a particular transaction. You can use up to five udfs in the post designated as udf1, udf2, udf3, udf4, udf5.
udf2
optional
String User-defined fields (udf) are used to store any information corresponding to a particular transaction. You can use up to five udfs in the post designated as udf1, udf2, udf3, udf4, udf5.
udf3
optional
String User-defined fields (udf) are used to store any information corresponding to a particular transaction.
udf4
optional
String User-defined fields (udf) are used to store any information corresponding to a particular transaction.
udf5
optional
String User-defined fields (udf) are used to store any information corresponding to a particular transaction.

beneficiarydetail JSON Object Fields

It must contain the list of account numbers and the ifscCode key with the list of corresponding IFSC codes (in the same order as provided in the beneficiaryAccountNumber key). You can post up to five account details in this parameter. For example:

{"beneficiaryAccountNumber":"002001600674|00000031957292212|00000035955239352|00000035955239352",  
"ifscCode":"KTKB0000046|KTKB0000023|KTKB0000035|KTKB0000035"}

Checksum Logic for Hash

The following hash logic must be used for the parameters posted:

πŸ“˜

beneficiarydetail parameter in Hashing:

The beneficiarydetail parameter value will be at last or the last value to be appended.

key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3
|udf4|udf5||||||beneficiarydetail|SALT

Step 3: Check the response from PayU

Hash Validation Logic for Payment Response (Reverse Hashing)

While sending the response, PayU takes the exact same parameters that were sent in the request (in reverse order) to calculate the hash and returns it to you. You must verify the hash and then mark a transaction as a success or failure. This is to make sure the transaction has not tampered within the response.

The order of the parameters is similar to the following code block:

sha512(SALT|beneficiarydetail|status||||||udf3|udf2|udf1|email|firstname|productinfo|amount|txnid|key)

Response parameters

The following table describes the parameters in the response from PayU:

Param NameDescription
mihpayidIt is a unique reference number created for each transaction at PayU’s end. You must note this transaction ID as this will be used as a reference for all the future actions on this transaction like Inquiry or Refund.
merchantidIt is the unique ID of the merchant.
txnidThis parameter would contain the transaction ID value posted by the merchant during the transaction request.
transaction_feeThe transaction fee for the TPV transaction. For Net Banking, INR 10 is charged by default.
discountThe discount amount given by bank on the transaction fee (if any).
amountThe net amount after discount (if any) is displayed in this parameter. For Net Banking, INR 10 is charged by default.
paymentgatewayidThe payment gateway identifier for the bank sending the response.
pgThe payment gateway used for the transaction. In case of UPI, it is β€œUPI.”
statusThis parameter gives the status of the transaction as either success, failed or pending.
Possible values:Β success, failure, pending
If the value of the β€˜status’ parameter is ’success’, the transaction is successful.
If the value of β€˜status’ is β€˜failure’ or β€˜pending’, must be treated as a failed transaction only
PG_TypeThe bankcode (as in Merchant Hosted Checkout integration) of the bank is returned in the parameter.
keyThis parameter contains the merchant key for the merchant’s account at PayU. It would be the same as the key used while the transaction request is being posted from the merchant’s end to PayU.
riskactionStrThis parameter contains risk action (if any) taken on the account holder.
addedonThe transaction timestamp is returned in this parameter.

πŸ“˜

Store the mihpayid and txnid parameter values in response:

PayU recommends you to make provisions to store the mihpayid and txnid parameter values (in the response) in your server as proof that TPV has been completed for a customer.

Sample response

The formatted response from PayU:

Array
(
    [mihpayid] => 403993715524308315
    [mode] => UPI
    [status] => success
    [unmappedstatus] => captured
    [key] => JP***g
    [txnid] => Job7NydtwPVAmy
    [amount] => 10.00
    [discount] => 0.00
    [net_amount_debit] => 10
    [addedon] => 2021-10-05 12:51:20
    [productinfo] => iPhone
    [firstname] => Ashish
    [lastname] => 
    [address1] => 
    [address2] => 
    [city] => 
    [state] => 
    [country] => 
    [zipcode] => 
    [email] => [email protected]
    [phone] => 9876543210
    [udf1] => 
    [udf2] => 
    [udf3] => 
    [udf4] => 
    [udf5] => 
    [udf6] => 
    [udf7] => 
    [udf8] => 
    [udf9] => 
    [udf10] => 
    [hash] => de4f82af65458c84080d6515c1a80d42af703be390346ef020974e520efeb4ab9ebe4752e63e70d6f00dedd671c663dfdb22d0f0c818c52790e911e8babd3f6e
    [field1] => anything@payu
    [field2] => Job7NydtwPVAmy
    [field3] => 
    [field4] => Ashish
    [field5] => AXImAH1BxekGdTLY7qgjMXffAAjJj5Q75mY
    [field6] => 
    [field7] => Transaction completed successfully
    [field8] => 
    [field9] => Transaction completed successfully
    [payment_source] => payu
    [PG_TYPE] => UPI-PG
    [bank_ref_num] => Job7NydtwPVAmy
    [bankcode] => UPI
    [error] => E000
    [error_Message] => No Error
)

πŸ“˜

Verify payment:

PayU recommends you. to verify the transaction details using the Verification Payment API. For more information, For API reference, refer to Verify Payment API.