In this blog post I Will explain how to setup and integrate PayUmoney payment gateway in your website or web application. Integrating PayU payment gateway can be little confusing at first and also some of my readers requested me to write this tutorial. Well Most of things are already in PayU payment gateway documentation, I will just explain it in steps so anyone can easily integrate without reading the whole documentation.

Steps To Integrate PayUMoney Payment Gateway.

Step 1: Go have to go to https://test.payumoney.com/ and create a merchant account with your details.

Step 2: After filling all the required steps, your account should be live if not then write mail to PayU support team at : techsupport@payumoney.com and they will guide you through your account issues.

Step 3: Now if completed your account and your account is live, you can get your key and salt. Go to Manage Account ⇒ My Account ⇒ Merchant -Key Salt

Step 4: Now once you are done with your merchant account, have a look at the code below.

Below Code is decided into three files: index.php, success.php and failure.php. You can use and modify the code from index.php to any file in you website. Add Key and salt to your code as in index.php below

index.php

/* starts here */
<?php
// Merchant key here as provided by Payu
$MERCHANT_KEY = "hDkYGPQe";

// Merchant Salt as provided by Payu
$SALT = "yIEkykqEH3";

// End point - change to https://secure.payu.in for LIVE mode
$PAYU_BASE_URL = "https://test.payu.in";

$action = '';

$posted = array();
if(!empty($_POST)) {
 //print_r($_POST);
 foreach($_POST as $key => $value) { 
 $posted[$key] = $value; 
 
 }
}

$formError = 0;

if(empty($posted['txnid'])) {
 // Generate random transaction id
 $txnid = substr(hash('sha256', mt_rand() . microtime()), 0, 20);
} else {
 $txnid = $posted['txnid'];
}
$hash = '';
// Hash Sequence
$hashSequence = "key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10";
if(empty($posted['hash']) && sizeof($posted) > 0) {
 if(
 empty($posted['key'])
 || empty($posted['txnid'])
 || empty($posted['amount'])
 || empty($posted['firstname'])
 || empty($posted['email'])
 || empty($posted['phone'])
 || empty($posted['productinfo'])
 || empty($posted['surl'])
 || empty($posted['furl'])
 || empty($posted['service_provider'])
 ) {
 $formError = 1;
 } else {
 //$posted['productinfo'] = json_encode(json_decode('[{"name":"tutionfee","description":"","value":"500","isRequired":"false"},{"name":"developmentfee","description":"monthly tution fee","value":"1500","isRequired":"false"}]'));
 $hashVarsSeq = explode('|', $hashSequence);
 $hash_string = ''; 
 foreach($hashVarsSeq as $hash_var) {
 $hash_string .= isset($posted[$hash_var]) ? $posted[$hash_var] : '';
 $hash_string .= '|';
 }

 $hash_string .= $SALT;


 $hash = strtolower(hash('sha512', $hash_string));
 $action = $PAYU_BASE_URL . '/_payment';
 }
} elseif(!empty($posted['hash'])) {
 $hash = $posted['hash'];
 $action = $PAYU_BASE_URL . '/_payment';
}
?>
<html>
 <head>
 <script>
 var hash = '<?php echo $hash ?>';
 function submitPayuForm() {
 if(hash == '') {
 return;
 }
 var payuForm = document.forms.payuForm;
 payuForm.submit();
 }
 </script>
 </head>
 <body onload="submitPayuForm()">
 <h2>PayU Form</h2>
 <br/>
 <?php if($formError) { ?>
 
 <span style="color:red">Please fill all mandatory fields.</span>
 <br/>
 <br/>
 <?php } ?>
 <form action="<?php echo $action; ?>" method="post" name="payuForm">
 <input type="hidden" name="key" value="<?php echo $MERCHANT_KEY ?>" />
 <input type="hidden" name="hash" value="<?php echo $hash ?>"/>
 <input type="hidden" name="txnid" value="<?php echo $txnid ?>" />
 <table>
 <tr>
 <td><b>Mandatory Parameters</b></td>
 </tr>
 <tr>
 <td>Amount: </td>
 <td><input name="amount" value="<?php echo (empty($posted['amount'])) ? '' : $posted['amount'] ?>" /></td>
 <td>First Name: </td>
 <td><input name="firstname" id="firstname" value="<?php echo (empty($posted['firstname'])) ? '' : $posted['firstname']; ?>" /></td>
 </tr>
 <tr>
 <td>Email: </td>
 <td><input name="email" id="email" value="<?php echo (empty($posted['email'])) ? '' : $posted['email']; ?>" /></td>
 <td>Phone: </td>
 <td><input name="phone" value="<?php echo (empty($posted['phone'])) ? '' : $posted['phone']; ?>" /></td>
 </tr>
 <tr>
 <td>Product Info: </td>
 <td colspan="3"><textarea name="productinfo"><?php echo (empty($posted['productinfo'])) ? '' : $posted['productinfo'] ?></textarea></td>
 </tr>
 <tr>
 <td>Success URI: </td>
 <td colspan="3"><input name="surl" value="<?php echo (empty($posted['surl'])) ? '' : $posted['surl'] ?>" size="64" /></td>
 </tr>
 <tr>
 <td>Failure URI: </td>
 <td colspan="3"><input name="furl" value="<?php echo (empty($posted['furl'])) ? '' : $posted['furl'] ?>" size="64" /></td>
 </tr>

 <tr>
 <td colspan="3"><input type="hidden" name="service_provider" value="payu_paisa" size="64" /></td>
 </tr>

 <tr>
 <td><b>Optional Parameters</b></td>
 </tr>
 <tr>
 <td>Last Name: </td>
 <td><input name="lastname" id="lastname" value="<?php echo (empty($posted['lastname'])) ? '' : $posted['lastname']; ?>" /></td>
 <td>Cancel URI: </td>
 <td><input name="curl" value="" /></td>
 </tr>
 <tr>
 <td>Address1: </td>
 <td><input name="address1" value="<?php echo (empty($posted['address1'])) ? '' : $posted['address1']; ?>" /></td>
 <td>Address2: </td>
 <td><input name="address2" value="<?php echo (empty($posted['address2'])) ? '' : $posted['address2']; ?>" /></td>
 </tr>
 <tr>
 <td>City: </td>
 <td><input name="city" value="<?php echo (empty($posted['city'])) ? '' : $posted['city']; ?>" /></td>
 <td>State: </td>
 <td><input name="state" value="<?php echo (empty($posted['state'])) ? '' : $posted['state']; ?>" /></td>
 </tr>
 <tr>
 <td>Country: </td>
 <td><input name="country" value="<?php echo (empty($posted['country'])) ? '' : $posted['country']; ?>" /></td>
 <td>Zipcode: </td>
 <td><input name="zipcode" value="<?php echo (empty($posted['zipcode'])) ? '' : $posted['zipcode']; ?>" /></td>
 </tr>
 <tr>
 <td>UDF1: </td>
 <td><input name="udf1" value="<?php echo (empty($posted['udf1'])) ? '' : $posted['udf1']; ?>" /></td>
 <td>UDF2: </td>
 <td><input name="udf2" value="<?php echo (empty($posted['udf2'])) ? '' : $posted['udf2']; ?>" /></td>
 </tr>
 <tr>
 <td>UDF3: </td>
 <td><input name="udf3" value="<?php echo (empty($posted['udf3'])) ? '' : $posted['udf3']; ?>" /></td>
 <td>UDF4: </td>
 <td><input name="udf4" value="<?php echo (empty($posted['udf4'])) ? '' : $posted['udf4']; ?>" /></td>
 </tr>
 <tr>
 <td>UDF5: </td>
 <td><input name="udf5" value="<?php echo (empty($posted['udf5'])) ? '' : $posted['udf5']; ?>" /></td>
 <td>PG: </td>
 <td><input name="pg" value="<?php echo (empty($posted['pg'])) ? '' : $posted['pg']; ?>" /></td>
 </tr>
 <tr>
 <?php if(!$hash) { ?>
 <td colspan="4"><input type="submit" value="Submit" /></td>
 <?php } ?>
 </tr>
 </table>
 </form>
 </body>
</html>

/* to here*/

success.php

/* here */
<?php
$status=$_POST["status"];
$firstname=$_POST["firstname"];
$amount=$_POST["amount"];
$txnid=$_POST["txnid"];
$posted_hash=$_POST["hash"];
$key=$_POST["key"];
$productinfo=$_POST["productinfo"];
$email=$_POST["email"];
$salt="yIEkykqEH3";

If (isset($_POST["additionalCharges"])) {
 $additionalCharges=$_POST["additionalCharges"];
 $retHashSeq = $additionalCharges.'|'.$salt.'|'.$status.'|||||||||||'.$email.'|'.$firstname.'|'.$productinfo.'|'.$amount.'|'.$txnid.'|'.$key;
 
 }
 else { 

 $retHashSeq = $salt.'|'.$status.'|||||||||||'.$email.'|'.$firstname.'|'.$productinfo.'|'.$amount.'|'.$txnid.'|'.$key;

 }
 $hash = hash("sha512", $retHashSeq);
 
 if ($hash != $posted_hash) {
 echo "Invalid Transaction. Please try again";
 }
 else {
 
 echo "<h3>Thank You. Your order status is ". $status .".</h3>";
 echo "<h4>Your Transaction ID for this transaction is ".$txnid.".</h4>";
 echo "<h4>We have received a payment of Rs. " . $amount . ". Your order will soon be shipped.</h4>";
 
 } 
?>
/* to here */

failure.php

/* here */
<?php
$status=$_POST["status"];
$firstname=$_POST["firstname"];
$amount=$_POST["amount"];
$txnid=$_POST["txnid"];

$posted_hash=$_POST["hash"];
$key=$_POST["key"];
$productinfo=$_POST["productinfo"];
$email=$_POST["email"];
$salt="yIEkykqEH3";

If (isset($_POST["additionalCharges"])) {
 $additionalCharges=$_POST["additionalCharges"];
 $retHashSeq = $additionalCharges.'|'.$salt.'|'.$status.'|||||||||||'.$email.'|'.$firstname.'|'.$productinfo.'|'.$amount.'|'.$txnid.'|'.$key;
 
 }
 else { 

 $retHashSeq = $salt.'|'.$status.'|||||||||||'.$email.'|'.$firstname.'|'.$productinfo.'|'.$amount.'|'.$txnid.'|'.$key;

 }
 $hash = hash("sha512", $retHashSeq);
 
 if ($hash != $posted_hash) {
 echo "Invalid Transaction. Please try again";
 }
 else {

 echo "<h3>Your order status is ". $status .".</h3>";
 echo "<h4>Your transaction id for this transaction is ".$txnid.". You may try making the payment by clicking the link below.</h4>";
 
 } 
?>
<!--Please enter your website homepagge URL -->
<p><a href=http://localhost/testing/success_failure/PayUMoney_form.php> Try Again</a></p>

/* to here*/

You might also be interested in following

Integrating PayTM Payment Gateway In PHP


Sahil Ahlawat

I am a Sr. Web Developer passionate about blogging and teaching. When I am not coding or writing blogs, I prefer traveling (Which I like most). I am also doing a bit or research on Indian Startups now a days.

Leave a Reply

Your email address will not be published. Required fields are marked *