PHP Payment Library for Paypal, Authorize.net and 2Checkout (2CO)

Whenever you need to work with a 3rd party API or a
gateway, you’d first search in Google for a possible wrapper for it in
PHP. When it comes to supporting payment gateways, you get bunch of
libraries in the search results who are fundamentally different. Some
of them are old PHP 3/4 ones, some are new, some may need PEAR, etc.

As they were not required together in one single project, I used
them whenever needed. But in one project, I needed them all. I thoughts
it’s a chance and decided to stop using them and wrote my own ones
where I can use the same methods for all the gateways.

So, here is an abstract PaymentGateway library which is being extended to be used for three popular payment gateways (Paypal, Authorize.net, and 2Checkout)
in order to provide you with a similar way of using them. Note that the
libraries are for basic usage only and do not contain options for
recurring payments. Without much babble, let’s see a few examples of
how you can use them.

Paypal

In order to process payments using Paypal, you’ll need to follow these steps:

1. Send the required information to Paypal (snippet 1). Be sure to
specify your Paypal email where you want to receive the funds, the
success and failure pages, the IPN page, and the product information.
The example has the test mode ON, which you will not need in real
scenario.

2. Create a payment success page where Paypal will send your customer after payment.

3. Create a payment failure page where Paypal will send your customer after failed payment.

4. Create a IPN page where Paypal will send payment notification in
the background. Make sure you use/remove the test mode in conjunction
with step 1. (snippet 2)

01.<?php
02.
03.// Include the paypal library
04.include_once ('Paypal.php');
05.
06.// Create an instance of the paypal library
07.$myPaypal = new Paypal();
08.
09.// Specify your paypal email
10.$myPaypal->addField('business', 'YOUR_PAYPAL_EMAIL');
11.
12.// Specify the currency
13.$myPaypal->addField('currency_code', 'USD');
14.
15.// Specify the url where paypal will send the user on success/failure
16.$myPaypal->addField('return', 'http://YOUR_HOST/payment/paypal_success.php');
17.$myPaypal->addField('cancel_return', 'http://YOUR_HOST/payment/paypal_failure.php');
18.
19.// Specify the url where paypal will send the IPN
20.$myPaypal->addField('notify_url', 'http://YOUR_HOST/payment/paypal_ipn.php');
21.
22.// Specify the product information
23.$myPaypal->addField('item_name', 'T-Shirt');
24.$myPaypal->addField('amount', '9.99');
25.$myPaypal->addField('item_number', '001');
26.
27.// Specify any custom value
28.$myPaypal->addField('custom', 'muri-khao');
29.
30.// Enable test mode if needed
31.$myPaypal->enableTestMode();
32.
33.// Let's start the train!
34.$myPaypal->submitPayment();

Snippet 1

01.<?php
02.
03.// Include the paypal library
04.include_once ('Paypal.php');
05.
06.// Create an instance of the paypal library
07.$myPaypal = new Paypal();
08.
09.// Log the IPN results
10.$myPaypal->ipnLog = TRUE;
11.
12.// Enable test mode if needed
13.$myPaypal->enableTestMode();
14.
15.// Check validity and write down it
16.if ($myPaypal->validateIpn())
17.{
18. if ($myPaypal->ipnData['payment_status'] == 'Completed')
19. {
20. file_put_contents('paypal.txt', 'SUCCESS');
21. }
22. else
23. {
24. file_put_contents('paypal.txt', "FAILURE\n\n" . $myPaypal->ipnData);
25. }
26.}

Snippet 2

Authorize.net

In order to process payments using Authorize.net, you’ll need to follow these steps:

1. Send the required information to Authorize.net(snippet 3). Be
sure to specify your Authorize.net login and secret key, the
success/failure pages, the IPN page, and the product information. The
example has the test mode ON, which you will not need in real scenario.

2. Create a payment success/failure page where Authorize.net will send your customer after payment.

3. Create a IPN page where Authorize.net will send payment
notification in the background. Make sure you use/remove the test mode
in conjunction with step 1. (snippet 4)

4. In order to set the secret key, log into your authorize.net
merchant account. Go to “MD5 Hash” menu and set a secret word to
desired values and use that in the “setUserInfo” function showed in the
example.

01.<?php
02.
03.// Include the paypal library
04.include_once ('Authorize.php');
05.
06.// Create an instance of the authorize.net library
07.$myAuthorize = new Authorize();
08.
09.// Specify your authorize.net login and secret
10.$myAuthorize->setUserInfo('YOUR_LOGIN', 'YOUR_SECRET_KEY');
11.
12.// Specify the url where authorize.net will send the user on success/failure
13.$myAuthorize->addField('x_Receipt_Link_URL', 'http://YOUR_HOST/payment/authorize_success.php');
14.
15.// Specify the url where authorize.net will send the IPN
16.$myAuthorize->addField('x_Relay_URL', 'http://YOUR_HOST/payment/authorize_ipn.php');
17.
18.// Specify the product information
19.$myAuthorize->addField('x_Description', 'T-Shirt');
20.$myAuthorize->addField('x_Amount', '9.99');
21.$myAuthorize->addField('x_Invoice_num', rand(1, 100));
22.$myAuthorize->addField('x_Cust_ID', 'muri-khao');
23.
24.// Enable test mode if needed
25.$myAuthorize->enableTestMode();
26.
27.// Let's start the train!
28.$myAuthorize->submitPayment();

Snippet 3

01.<?php
02.
03.// Include the paypal library
04.include_once ('Authorize.php');
05.
06.// Create an instance of the authorize.net library
07.$myAuthorize = new Authorize();
08.
09.// Log the IPN results
10.$myAuthorize->ipnLog = TRUE;
11.
12.// Specify your authorize login and secret
13.$myAuthorize->setUserInfo('YOUR_LOGIN', 'YOUR_SECRET_KEY');
14.
15.// Enable test mode if needed
16.$myAuthorize->enableTestMode();
17.
18.// Check validity and write down it
19.if ($myAuthorize->validateIpn())
20.{
21. file_put_contents('authorize.txt', 'SUCCESS');
22.}
23.else
24.{
25. file_put_contents('authorize.txt', "FAILURE\n\n" . $myPaypal->ipnData);
26.}

Snippet 4

2Checkout

In order to process payments using 2Checkout, you’ll need to follow these steps:

1. Send the required information to 2Checkout(snippet 5). Be sure to
specify your 2Checkout vendor id, the return page, and the product
information. Please note that 2Checkout does not send IPN in the
background, so you will need to handle the payment data in the return
page. The example has the test mode ON, which you will not need in real
scenario.

2. Create a return page where 2Checkout will send your customer
after payment. This is also where you will need to retrieve and use the
payment data. Make sure you use/remove the test mode in conjunction
with step 1. (snippet 6)

3. In order to set the secret key, log into your 2checkout.com
account and go to “Look and Feel” section. At the bottom enter the
“Secret Word” and use it in the IPN verification process as shown in
the example.

01.<?php
02.
03.// Include the paypal library
04.include_once ('TwoCo.php');
05.
06.// Create an instance of the authorize.net library
07.$my2CO = new TwoCo();
08.
09.// Specify your 2CheckOut vendor id
10.$my2CO->addField('sid', 'YOUR_VENDOR_ID');
11.
12.// Specify the order information
13.$my2CO->addField('cart_order_id', rand(1, 100));
14.$my2CO->addField('total', '9.99');
15.
16.// Specify the url where authorize.net will send the IPN
17.$my2CO->addField('x_Receipt_Link_URL', 'http://YOUR_HOST/payment/twoco_ipn.php');
18.$my2CO->addField('tco_currency', 'USD');
19.$my2CO->addField('custom', 'muri-khao');
20.
21.// Enable test mode if needed
22.$my2CO->enableTestMode();
23.
24.// Let's start the train!
25.$my2CO->submitPayment();

Snippet 5

01.<?php
02.
03.// Include the paypal library
04.include_once ('TwoCo.php');
05.
06.// Create an instance of the authorize.net library
07.$my2CO = new TwoCo();
08.
09.// Log the IPN results
10.$my2CO->ipnLog = TRUE;
11.
12.// Specify your authorize login and secret
13.$my2CO->setSecret('YOUR_SECRET_KEY');
14.
15.// Enable test mode if needed
16.$my2CO->enableTestMode();
17.
18.// Check validity and write down it
19.if ($my2CO->validateIpn())
20.{
21. file_put_contents('2co.txt', 'SUCCESS');
22.}
23.else
24.{
25. file_put_contents('2co.txt', "FAILURE\n\n" . $my2CO->ipnData);
26.}

Snippet 6

Hope this will help you integrate the payment gateways in an easy
manner. If you have any questions, or find any bug, have a suggestion,
feel free to post them as comment here.

  1. No comments yet.

  1. March 18th, 2010
    Trackback from : Антон Павлович
  2. April 12th, 2010
    Trackback from : Kylie BattName
  3. May 19th, 2010
    Trackback from : Kylie Batt