Integrating your website with Interswitch WebPay (Concluding Part) Part 2

In the previous part of this article (Part 1) I discussed the basics of integrating Interswitch WebPay into your website. If you’ve not gone through the article or you are not sure if you got the whole idea previously, please go through it again. Click here

Previously, I used the function addTransaction() to store the transaction details before we send the request to WebPay, we need to do this to help us monitor each transaction, also it allows us to update the payment status whenever a payment is made. Anyway, I think it’s the best approach.

Let’s look at it this way; You store the transaction details whenever someone makes an order, next you send the order details/transaction details to Interswitch then Interswitch sends you a reply when the payment is made (success, failure, pending,…). Next you store the response you get from Interswitch and update the payment status of the transaction then redirect the user to a page displaying the details and status of the transaction, more like displaying an invoice.

The diagram below may explain it better.

That’s about how it works, so let’s begin with how we write the code for this. To store our order, we receive the entire order (POST) request from the form or cart page etc.

Making an Order

Before we do that, we need to set some variables at the top of our page to help receive response from Interswitch and also store some values needed to identify our website to Interswitch.

$id = $_SESSION['id']; // the userid of the person paying for a product
$success = $_GET["rspcode"]; // the response code we get fromInterswich
$appamt = $_GET["appamt"]; // the total amount of the order
$merchantID = "Demo"; // the merchant ID given to us buy interswitch
$cpID = "CADP628051"; // Also the CPID given to us by interswich

Let’s begin with the POST request from our cart page here…

if (isset($_POST['submit']) && isset($_REQUEST['tid']) && $_REQUEST['amount'] != null)
{
//we want to find out if a checkout button is clicked and we are also sending the
//transactionID and amount together with the request.
//get all information from the post request

$transaction_id = mysql_real_escape_string($_POST[‘tid’]);
$amount = mysql_real_escape_string($_POST[‘amount’]);
$buyer_id = mysql_real_escape_string($_POST[‘bid’]);
$description = mysql_real_escape_string($_POST[‘desc’]);
$pgate = “Interswitch”;
$time = date(“D d F, Y – g:i A”, time());
$result = addTransaction($transaction_id, $time, $buyer_id, $amount, $pgate, $description, 0);
////here we store the transaction details with our addTransaction() function
if ($result)
// if we get a positive response from our function, it means the data was stored
//successfully. Remember to catch all errors, so you can also use else to display an error message
//or from the function
{
//store these values so we can set and unset them when we are done with the transaction
$_SESSION[‘tid’] = $transaction_id;
$_SESSION[‘bid’] = $buyer_id;
$_SESSION[‘desc’] = $description;
$_SESSION[‘amount’] = $amount;
$_SESSION[‘pgate’] = $pgate;
}
}

Next we need to send the whole details to Interswitch

Sending a request to Interswitch WebPay

if ($success == null)
{
//or success = "" means we are not getting any response yet from Interswitch and we are trying to send WebPay a messsage
?>

echo ‘

Return to Shopping Cart !

 

‘;
}

From the entire story we have above, we are using an iframe to display the payment page from Interswich, where the user enters his/her debit card number and pin on our page. The iFrame has a size, so you can adjust it to your taste. We also made use of a javascript function doPayment() that receives all our order details and sends the information to WebPay in a url string. We have something like this at the end:
https://webpay.interswitchng.com/webpay/purchase.aspx?CADPID=CADP628051&MERTID=Demo&TXNREF=38847f44ea44&AMT=3000&TRANTYPE=00

You can also view the payment page from Interswitch by typing the url above in your browser after filling the details correctly, like your Merchant ID, CPID, amount etc.

We have something like this eventually;

Receiving response from Interswitch WebPay

Now that the user has paid for the product, how do we receive the payment status from Interswitch and also display an invoice to the user? Well, we would need to look at our previous if statement that says if ($success == null) and create another if statement that looks out for other Interswich WebPay Success codes e.g., 00,09 etc.

We will have something like this:

if ($success == "00")
{
//deal with successful transaction
$query = mysql_query("UPDATE transactions SET t_status=1 WHERE transaction_id='" . $_SESSION['tid'] . "'");
//all we do here is to update that our transaction on the database with the success code we get from WebPay and display a message to the user.
echo "
Transaction Successfull

“;
echo ”

Transaction details

“;
echo “Transaction ID:
” . $_SESSION[‘tid’] . ”

“;
echo “Description:
” . $_SESSION[‘desc’] . ”

“;
echo “Total Amount:
=N=” . number_format($_SESSION[‘amount’]) . ”

“;
echo “Payment Method:
” . $_SESSION[‘pgate’] . ”

“;
echo “Time:
” . date(“D d F, Y – g:i A”, time()) . ”

“;

//delete the product from cart
$query = mysql_query(“DELETE FROM shopping_cart WHERE user_id='” . $_SESSION[‘bid’] . “‘”);

echo ‘

Shopping Cart !

 

‘;
/*
I can add other success values from -1 to 25
to display payment notifications to the user
either error or other stuffs using else if ($success==”1″)
e.t.c. Then we unset all the session variables we used to store the transaction details
*/
unset($_SESSION[‘tid’]);
unset($_SESSION[‘bid’]);
unset($_SESSION[‘desc’]);
unset($_SESSION[‘amount’]);
unset($_SESSION[‘pgate’]);
}
else
{
//here, we can have another elseif() statement to display a message for other response
//codes we get from WebPay or just deal with other response codes as a failed transaction.
//Deal with Timeout Here, Transaction ID no more valid

echo ”

Error while requesting for transaction authorization, Transaction ID no more valid

“;
echo ‘

Shopping Cart !

 

‘;
$query = mysql_query(“DELETE FROM transactions WHERE transaction_id='” . $_SESSION[‘tid’] . “‘”);

//remember to unset all sessions containing the transaction details
unset($_SESSION[‘tid’]);
unset($_SESSION[‘bid’]);
unset($_SESSION[‘desc’]);
unset($_SESSION[‘amount’]);
unset($_SESSION[‘pgate’]);
}

What we have above receives a response from WebPay and displays a message to the user based on the response code it gets from Interswitch WebPay. There are several response codes you can handle in order to display a more detailed information to the user about a particular transaction. E.g. “You have insufficient balance”, “Issuer or switch Inoperative” etc.

Here is the list of response/error codes you will normally get from WebPay, please always remember to check the documentation provided by Interswitch while integrating.

RSPCODE – RSP DESCRIPTION
00 – Approved or completed successfully
01 – Refer to card issuer
02 – Refer to card issuer, special condition
03 – Invalid merchant
04 – Pick-up card
05 – Do not honor
06 – Error
07 – Pick-up card, special condition
08 – Honor with identification
09 – Request in progress
10 – Approved, partial
11 – Approved, VIP
12 – Invalid transaction
13 – Invalid amount
14 – Invalid card number
15 – No such issuer
16 – Approved, update track 3
17 – Customer cancellation
18 – Customer dispute
19 – Re-enter transaction
20 – Invalid response
21 – No action taken
22 – Suspected malfunction
23 – Unacceptable transaction fee
24 – File update not supported
25 – Unable to locate record
26 – Duplicate record
27 – File update field edit error
28 – File update file locked
29 – File update failed
30 – Format error
31 – Bank not supported
32 – Completed partially
33 – Expired card, pick-up
34 – Suspected fraud, pick-up
35 – Contact acquirer, pick-up
36 – Restricted card, pick-up
37 – Call acquirer security, pick-up
38 – PIN tries exceeded, pick-up
39 – No credit account
40 – Function not supported
41 – Lost card, pick-up
42 – No universal account
43 – Stolen card, pick-up
44 – No investment account
45 – Account closed
46 – Identification required
47 – Identification cross-check required
51 – Not sufficient funds
52 – No check account
53 – No savings account
54 – Expired card
55 – Incorrect PIN
56 – No card record
57 – Transaction not permitted to cardholder
58 – Transaction not permitted on terminal
59 – Suspected fraud
60 – Contact acquirer
61 – Exceeds withdrawal limit
62 – Restricted card

So it’s left for you to decide if you want to write an if or switch statement for these response codes in your payment page.

Alright, I hope you enjoyed this part, but it’s kind of a quick guide on how to integrate with WebPay. As soon as you are ready to integrate Interswich WebPay with your website, Interswitch will provide documentation on how to do this too.

Here is the complete payment page code for Interwsitch WebPay on our sample site, please note that this is not a production code, do not use it directly on a live site, it still needs to be properly tweaked if you want to use it on a production site. I hope I’ve tried to explain it as simple as I possibly can.

<!--?php <br ?--> $pagetitle = "Pay with Interswitch";
include ('header.php');
?&gt;
if ($_SESSION[‘id’])
{
$id = $_SESSION[‘id’];
$success = $_GET[“rspcode”];
$appamt = $_GET[“appamt”];
$merchantID = “Demo”;
$cpID = “CADP628051”;
if (isset($_POST[‘submit’]) && isset($_REQUEST[‘tid’]) && $_REQUEST[‘amount’] != null)
{
//get all information
$transaction_id = mysql_real_escape_string($_POST[‘tid’]);
$amount = mysql_real_escape_string($_POST[‘amount’]);
$buyer_id = mysql_real_escape_string($_POST[‘bid’]);
$description = mysql_real_escape_string($_POST[‘desc’]);
$pgate = “Interswitch”;
$time = date(“D d F, Y – g:i A”, time());
$result = addTransaction($transaction_id, $time, $buyer_id, $amount, $pgate, $description, 0);
if ($result)
{
//store these values so we can set and unset them wen we are done with the transaction
$_SESSION[‘tid’] = $transaction_id;
$_SESSION[‘bid’] = $buyer_id;
$_SESSION[‘desc’] = $description;
$_SESSION[‘amount’] = $amount;
$_SESSION[‘pgate’] = $pgate;
}
}
if ($success == null)
{ //or success = “”
?>

echo ‘

Return to Shopping Cart !

 

‘;
}
else if ($success == “00”)
{
//deal with successful transaction
$query = mysql_query(“UPDATE transactions SET t_status=1 WHERE transaction_id='” . $_SESSION[‘tid’] . “‘”);

echo ”

Transaction Successfull

“;
echo ”

Transaction details

“;
echo “Transaction ID:
” . $_SESSION[‘tid’] . ”

“;
echo “Description:
” . $_SESSION[‘desc’] . ”

“;
echo “Total Amount:
=N=” . number_format($_SESSION[‘amount’]) . ”

“;
echo “Payment Method:
” . $_SESSION[‘pgate’] . ”

“;
echo “Time:
” . date(“D d F, Y – g:i A”, time()) . ”

“;

//delete from cart
$query = mysql_query(“DELETE FROM shopping_cart WHERE user_id='” . $_SESSION[‘bid’] . “‘”);

//show dem o

echo ‘

Shopping Cart !

 

‘;
/*
I can add other success values from -1 to 25
to display payment notifications to the user
either error or other stuffs using else if ($success==”1″)
e.t.c.
*/
unset($_SESSION[‘tid’]);
unset($_SESSION[‘bid’]);
unset($_SESSION[‘desc’]);
unset($_SESSION[‘amount’]);
unset($_SESSION[‘pgate’]);
}
else
{ //Deal with Timeout Here, Transaction ID no more valid
echo ”

Error while requesting for transaction authorisation, Transaction ID no more valid

“;
echo ‘

Shopping Cart !

 

‘;
$query = mysql_query(“DELETE FROM transactions WHERE transaction_id='” . $_SESSION[‘tid’] . “‘”);

unset($_SESSION[‘tid’]);
unset($_SESSION[‘bid’]);
unset($_SESSION[‘desc’]);
unset($_SESSION[‘amount’]);
unset($_SESSION[‘pgate’]);
}
}
else
{
echo ‘

Please, login and come back later!

‘;
}
?>

include (‘footer.php’);
?>

Thanks for going through this with me, please comment below if you have any question or like to point out some errors and make suggestions to omitted points in this article. I’ll be delighted to respond to your questions and comments.

Thanks.

I write codes... web, mobile, desktop and hack stuffs

3 Responses
  • John Chukwuma
    May 27, 2015

    Hello Frank,
    I’m trying to integrate a company’s CS-cart to GTPay. They ve sent me the configuration detials, but I still have challenges. Pls I need ur help.
    U can text on 07035100460.
    Thanks.

    John Chukwuma May 27, 2015
    Reply
    • Jun 20, 2015

      Hey John Chukwuma,

      I can help you with the integration for GTPay. Send me an email at dami [at] ogunmoye [dot] com.

      Don’t worry, It won’t cost you a dime, just feel compelled to help as I went through that stage a while back.

      Dammyammy Jun 20, 2015
  • Gani
    Jul 29, 2015

    Thanks very much bro for taking your time to post this lengthy yet hard code, though the way you compiled everything makes it looks easy. Thanks.

    Gani Jul 29, 2015
    Reply

Leave a Reply

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