Handling the Redirect URLs
The surl
and furl
parameters in the Collect Payment API refer to the success and failure URLs respectively. These URLs are used to redirect the customer to your website after a successful or failed transaction.
To handle surl and furl parameters with the Collect Payment API (_payment), you can include them as part of the request payload. Here’s an example of how to do this:
{
"txnid": "12345",
"amount": "100.00",
"productinfo": "Test Product",
"firstname": "John",
"email": "[email protected]",
"phone": "9999999999",
"surl": "http://example.com/success",
"furl": "http://example.com/failure"
}
In the above example, the surl parameter is set to “http://example.com/success” and the furl parameter is set to “http://example.com/failure“. These URLs will be used by the PayU India API to redirect the customer to your website after a successful or failed transaction.
Note:
The URLs you provide for the surl & furl parameters must be accessible and valid.
The following sample code that demonstrates how to handle surl and furl parameters with the Collect Payment API:
import hashlib
import requests
def make_payment():
api_key = "your_api_key"
salt = "your_salt"
txn_id = "your_transaction_id"
amount = "100.00"
product_info = "Test Product"
first_name = "John"
email = "[email protected]"
phone = "9999999999"
surl = "http://example.com/success"
furl = "http://example.com/failure"
hash_string = f"{api_key}|{txn_id}|{amount}|{product_info}|{first_name}|{email}|||||||||||{salt}"
hash = hashlib.sha512(hash_string.encode()).hexdigest()
url = "https://test.payu.in/_payment"
payload = {
"key": api_key,
"txnid": txn_id,
"amount": amount,
"productinfo": product_info,
"firstname": first_name,
"email": email,
"phone": phone,
"surl": surl,
"furl": furl,
"hash": hash
}
response = requests.post(url, data=payload)
print(response.text)
<?php
function makePayment() {
$apiKey = "your_api_key";
$salt = "your_salt";
$txnId = "your_transaction_id";
$amount = "100.00";
$productInfo = "Test Product";
$firstName = "John";
$email = "[email protected]";
$phone = "9999999999";
$surl = "http://example.com/success";
$furl = "http://example.com/failure";
$hashString = "$apiKey|$txnId|$amount|$productInfo|$firstName|$email|||||||||||$salt";
$hash = hash('sha512', $hashString);
$data = array(
'key' => $apiKey,
'txnid' => $txnId,
'amount' => $amount,
'productinfo' => $productInfo,
'firstname' => $firstName,
'email' => $email,
'phone' => $phone,
'surl' => $surl,
'furl' => $furl,
'hash' => $hash,
);
$url = "https://test.payu.in/_payment";
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;
}
?>
function makePayment() {
var apiKey = "your_api_key";
var salt = "your_salt";
var txnId = "your_transaction_id";
var amount = "100.00";
var productInfo = "Test Product";
var firstName = "John";
var email = "[email protected]";
var phone = "9999999999";
var surl = "http://example.com/success";
var furl = "http://example.com/failure";
var hashString = apiKey + "|" + txnId + "|" + amount + "|" + productInfo + "|" + firstName + "|" + email + "|||||||||||" + salt;
var hash = sha512(hashString);
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://test.payu.in/_payment", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
var formData = new FormData();
formData.append("key", apiKey);
formData.append("txnid", txnId);
formData.append("amount", amount);
formData.append("productinfo", productInfo);
formData.append("firstname", firstName);
formData.append("email", email);
formData.append("phone", phone);
formData.append("surl", surl);
formData.append("furl", furl);
formData.append("hash", hash);
xhr.send(formData);
}
function sha512(value) {
var hash = CryptoJS.SHA512(value);
return hash.toString(CryptoJS.enc.Hex);
}
import java.io.*;
import java.net.*;
import java.util.*;
public class PayUIndiaPaymentAPI {
public static void main(String[] args) {
try {
String apiKey = "your_api_key";
String salt = "your_salt";
String txnId = "your_transaction_id";
String amount = "100.00";
String productInfo = "Test Product";
String firstName = "John";
String email = "[email protected]";
String phone = "9999999999";
String surl = "http://example.com/success";
String furl = "http://example.com/failure";
String hashString = apiKey + "|" + txnId + "|" + amount + "|" + productInfo + "|" + firstName + "|" + email + "|||||||||||" + salt;
String hash = hashCal("SHA-512", hashString);
URL url = new URL("https://test.payu.in/_payment");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setDoOutput(true);
Map<String, String> parameters = new LinkedHashMap<>();
parameters.put("key", apiKey);
parameters.put("txnid", txnId);
parameters.put("amount", amount);
parameters.put("productinfo", productInfo);
parameters.put("firstname", firstName);
parameters.put("email", email);
parameters.put("phone", phone);
parameters.put("surl", surl);
parameters.put("furl", furl);
parameters.put("hash", hash);
String parameterString = getPostDataString(parameters);
DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());
dataOutputStream.writeBytes(parameterString);
dataOutputStream.flush();
dataOutputStream.close();
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder response = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
response.append(line);
}
bufferedReader.close();
inputStream.close();
System.out.println(response.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public static String hashCal(String algorithm, String value) throws Exception {
byte[] messageDigest = MessageDigest.getInstance(algorithm).digest(value.getBytes());
StringBuilder stringBuilder = new StringBuilder();
for (byte digestByte : messageDigest) {
stringBuilder.append(Integer.toString((digestByte & 0xff) + 0x100, 16).substring(1));
}
return stringBuilder.toString();
}
public static String getPostDataString(Map<String, String> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first) {
first = false;
} else {
result.append("&");
}
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
In the above code, you need to replace the placeholders your_api_key
, your_salt
, your_transaction_id
, http://example.com/success
, and http://example.com/failure
with your actual values.
- Java: This code uses the
HttpURLConnection
class to send a POST request to the endpoint. - JavaScript: This code uses the
XMLHttpRequest
class to make a POST request to the endpoint. TheFormData
class is used to create the request payload, which includes surl and furl parameters. Thesha512
function calculates the hash of the request parameters. Note that this code uses the CryptoJS library to calculate the hash. - Python: This code uses the
hashlib
library to calculate the hash of the request parameters. Therequests
library is used to make a POST request to the endpoint. Thepayload
dictionary is used to create the request payload, which includes the surl and furl parameters. Theresponse
object contains the response from the API endpoint. - PHP: This code uses the
hash()
function to calculate the hash of the request parameters. Thefile_get_contents()
function is used to make a POST request to the endpoint. The$options
array is used to create the request payload, which includes the surl and furl parameters. The$result
variable contains the response from the API endpoint.
Updated 11 months ago