You can split during the transaction by amount, where you must ensure that the sum of all splits is equal to the parent transaction amount.
Note:
You must specify two decimal places for each split, but ensure that the sum of split amounts equals the transaction amount.
HTTP Method: POST
Environment
Test Environment | https://test.payu.in/_payment |
Production Environment | https://secure.payu.in/_payment |
Request parameters
Parameter | Description |
---|---|
keymandatory | String Merchant key provided by PayU during onboarding. |
txnidmandatory | String The transaction ID is a reference number for a specific order that is generated by the merchant. |
amount mandatory | String The payment amount for the transaction. |
productinfo mandatory | String A brief description of the product. |
firstname mandatory | String The first name of the customer. |
emailmandatory | String The email address of the customer. |
phonemandatory | String The phone number of the customer. |
pgmandatory | String The pg parameter determines which payment tabs will be displayed on the PayU page. For cards, 'CC' will be the value. |
bankcode mandatory | String Each payment option is identified with a unique bank code at PayU. The merchant must post this parameter with the corresponding payment optionโs bank code value in it. For more information, refer to Card Type Codes and Supported Banks for Cards. |
ccnummandatory for cards | String Use 13-19 digit card number for credit/debit cards (15 digits for AMEX, 13-19 for Maestro) and validate with LUHN algorithm. Refer to Card Number Formats and display error message on invalid input. |
ccname mandatory for cards | String This parameter must contain the name on card โ as entered by the customer for the transaction. |
ccvvmandatory for cards | String Use 3-digit CVV number for credit/debit cards and 4-digit security code (4DBC/CID) for AMEX cards. Validate with BIN API. |
ccexpmon mandatoryfor cards | String This parameter must contain the cardโs expiry month โ as entered by the user for the transaction. It must always be in 2 digits or in MM format. For months 1-9, this parameter must be appended with 0 โ like 01, 02โฆ09. For months 10-12, this parameter must not be appended โ It should be 10,11 and 12 respectively. |
ccexpyrmandatory for cards | String This parameter must contain the cardโs expiry year โ as entered by the customer for the transaction. It must be of four digits. |
furlmandatory | String The success URL, which is the page PayU will redirect to if the transaction is successful. |
surlmandatory | String The Failure URL, which is the page PayU will redirect to if the transaction is failed. |
splitRequestmandatory for Split Settlements | JSON This parameter must include the split payment details in a JSON format. For more information, refer to splitRequest JSON fields description sub-section. |
hashmandatory | String It 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|splitRequest |
address1optional | 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. |
address2optional | String The second line of the billing address. |
cityoptional | String The city where your customer resides as part of the billing address. |
stateoptional | String The state where your customer resides as part of the billing address, |
countryoptional | String The country where your customer resides. |
zipcodeoptional | String Billing address zip code.Character Limit -20 |
udf1optional | 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. |
udf2optional | 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. |
udf3optional | String User-defined fields (udf) are used to store any information corresponding to a particular transaction. |
udf4optional | String User-defined fields (udf) are used to store any information corresponding to a particular transaction. |
udf5optional | String User-defined fields (udf) are used to store any information corresponding to a particular transaction. |
splitRequest JSON fields description
The following fields are included in theย splitRequest parameter in a JSON format to specify the absolute split details. The fields in the JSON format are described in the following table:
Field | Description | Example |
---|---|---|
type mandatory | string Specify the absolute type of split in this field. The absolute amount is specified in the aggregatorSubAmt field of the JSON for each child or aggregator. | absolute |
splitInfo mandatory | JSON This parameter must include the list of aggregator sub transaction IDs and sub amounts as follows:- aggregatorSubTxnId: The transaction ID of the aggregator is posted in this parameter. This field is mandatory and applicable only for child merchants. - aggregatorSubAmt: The transaction amount or percentage split for the aggregator is posted in this parameter. This field is mandatory. - aggregatorCharges (optional): The transaction amount or percentage split for aggregator charges is posted in this parameter. This field is optional. Note: Only the parent aggregators can have the aggregatorCharges field as part of their JSON to collect charges. | { "merchantKey1": { "aggregatorSubTxnId": "30nknyhkhib", "aggregatorSubAmt": "8" }ย |
JSON request structure of splitInfo
The sample JSON structure for the splitInfo field:
Notes:
- Description of fields: Refer to splitRequest JSON fields description field.
- Before peruse the following sample code, remove the white spaces as some editors may introduce junk characters.
{
"type":"absolute",
"splitInfo":{
"P****Y":{
"aggregatorSubTxnId":"9a70ea0155268**1001ba",
"aggregatorSubAmt":"50",
"aggregatorCharges":"20"
},
"P***K":{
"aggregatorSubTxnId":"9a70ea0155268**1001bb",
"aggregatorSubAmt":"30"
}
}
}
Hashing request
Added as extra parameter in the calculation of hash in case of providing Split Request at time of payment. This parameter will be at the end of the hash pattern. and required while sending Split Request at time of payment.
You need to generate a string using certain parameters and apply the SHA-512 algorithm to this string. For more information on hashing, refer to Generate Hash.
Note:
Ensure that you use pipe (|) character between these parameters as mentioned in the following code block.
The parameter order is in the following code block:
sha512(key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5||||||SALT|splitRequest)
Where, splitRequest
will be at the end of the hash pattern string.
Example:
hash('sha512', 'Ax4j7J|payment-txnid-1|10|Product Info|Payu-Admin|[email protected]|||||||||||t5atu4TyCvrJDPxAYrmfJfzd90kbXMfL|{"type":"absolute","splitInfo":{"P41sCY":{"aggregatorSubTxnId":"0e7411799c9f0e96620c11","aggregatorSubAmt":"3","aggregatorCharges":"2"},"P41sCK":{"aggregatorSubTxnId":"0e7411799c9f0e96620c22","aggregatorSubAmt":"5"}}}'));
Check the response from PayU
Hash validation logic for payment response (Reverse hashing)
Use the following algorithm for reverse hashing the response from PayU:
sha512(SALT|status|splitInfo||||||udf5|udf4|udf3|udf2|udf1|email|firstname|productinfo|amount|txnid|key)
Sample response
TDR model
The formatted response for the above sample request is similar to the following:
Array
(
[mihpayid] => 4123**678**2383977
[mode] => CC
[status] => success
[unmappedstatus] => captured
[key] => A****J
[txnid] => 9a70ea0155268101001b
[amount] => 100.00
[cardCategory] => domestic
[discount] => 0.00
[net_amount_debit] => 100
[addedon] => 2021-12-22 19:02:15
[productinfo] => Product Info
[firstname] => Payu-Admin
[lastname] =>
[address1] =>
[address2] =>
[city] =>
[state] =>
[country] =>
[zipcode] =>
[email] => [email protected]
[phone] => 1234567890
[udf1] =>
[udf2] =>
[udf3] =>
[udf4] =>
[udf5] =>
[udf6] =>
[udf7] =>
[udf8] =>
[udf9] =>
[udf10] =>
[hash] => 6e700275583072c0361bac771a4166a4be5334112d59e40181c5668895c477a047c7be250068186fd26ca72928d7e168f92bb96003a7fffbf4933bb818f4c48a
[field1] => 558**9955**14671900181
[field2] => 113476
[field3] => 100.00
[field4] => 412*456789***83977
[field5] => 100
[field6] => 02
[field7] => AUTHPOSITIVE
[field8] =>
[field9] => Transaction is Successful
[payment_source] => payu
[PG_TYPE] => AxisCYBER
[bank_ref_num] => 55**299554**4671900181
[bankcode] => CC
[error] => E000
[error_Message] => No Error
[name_on_card] => Test User
[cardnum] => 5**345XXXXXX2346
[cardhash] => This field is no longer supported in postback params.
[splitInfo] => {"splitStatus":"success","splitSegments":[{"merchantKey":"P****Y","amount":50,"subvention_amount":0,"txnId":"9a70ea0155268101001ba"},{"merchantKey":"P****K","amount":30,"subvention_amount":0,"txnId":"9a70ea0155268101001bb"},{"merchantKey":"s****r","amount":20,"subvention_amount":0,"txnId":"9a70ea0155268101001b"}]}
)
Note:
In the response, the amount shown in the amount field includes the amount shown in the subvention_amount field.
Convenience model
The formatted response for the above sample request is similar to the following:
Array
(
[mihpayid] => 412**567**12383977
[mode] => CC
[status] => success
[unmappedstatus] => captured
[key] => A****J
[txnid] => 9a70ea0155268101001b
[amount] => 110.00
[cardCategory] => domestic
[discount] => 0.00
[net_amount_debit] => 110
[addedon] => 2021-12-22 19:02:15
[productinfo] => Product Info
[firstname] => Payu-Admin
[lastname] =>
[address1] =>
[address2] =>
[city] =>
[state] =>
[country] =>
[zipcode] =>
[email] => [email protected]
[phone] => 1234567890
[udf1] =>
[udf2] =>
[udf3] =>
[udf4] =>
[udf5] =>
[udf6] =>
[udf7] =>
[udf8] =>
[udf9] =>
[udf10] =>
[hash] => 6e700275583072c0361bac771a4166a4be5334112d59e40181c5668895c477a047c7be250068186fd26ca72928d7e168f92bb96003a7fffbf4933bb818f4c48a
[field1] => 5582299554914671900181
[field2] => 113476
[field3] => 110.00
[field4] => 4123**67891**83977
[field5] => 110
[field6] => 02
[field7] => AUTHPOSITIVE
[field8] =>
[field9] => Transaction is Successful
[payment_source] => payu
[PG_TYPE] => AxisCYBER
[bank_ref_num] => 55**2995549**6719**181
[bankcode] => CC
[error] => E000
[error_Message] => No Error
[name_on_card] => Test User
[cardnum] => 5**2345XXXXXX2346
[cardhash] => This field is no longer supported in postback params.
[splitInfo] => {"splitStatus":"success","splitSegments":[
{"merchantKey":"P****Y","amount":50,"subvention_amount":0,"txnId":"9a70ea0155268101001ba", โdiscount":0,"additionalCharges":0,โtransaction_fee":0โ},
{"merchantKey":"P****K","amount":30,"subvention_amount":0,"txnId":"9a70ea0155268101001bb", โdiscount":0,"additionalCharges":0,โtransaction_fee":0โ},
{"merchantKey":"s****r","amount":20,"subvention_amount":0,"txnId":"9a70ea0155268101001b", โdiscount":0,"additionalCharges":0,โtransaction_feeโ:10โ}
]}
)