TGuimond
TGuimond

Reputation: 5487

PHP Worldpay Payment Response Example

I am developing a site for a client and one of the requirements is to integrate worldpay payments for the purchasing process.

Once the user has completed payment for a product I need to alert a licencing system to the completed payment. The worldpay documentation gives an overview of the payment response service but does not give a code example.

I have had the client set up the payment response option in their test installation but would rather not have to go about coding my own page to handle the response if someone else has already done it. Does anyone have a link to a good code example (in php)?? I have had a decent look online and have not turned up much.

Thanks!

Upvotes: 0

Views: 8214

Answers (4)

Maki
Maki

Reputation: 31

small class extension to the TGuimond - WorldPay_Response class:

<?php //Worldpay 

class WorldPay_Response {
    // define properties
    public $transaction_id = null;
    public $transaction_status = null;
    public $transaction_time = null;
    public $authorisation_amount = null;
    public $authorisation_currency = null;
    public $authorisation_amount_string = null;
    public $raw_auth_message = null;
    public $raw_auth_code = null;
    public $callback_password = null;
    public $card_type = null;
    public $authentication = null;
    public $ip_address = null;
    public $character_encoding = null;
    public $future_payment_id = null;
    public $future_payment_status_change = null;

    /* extension */
    public $name = null;
    public $address = null;
    public $town = null;
    public $email = null;
    public $desc = null;

    //custom properties not included by worldpay
    public $mc_custom_property = null;

    // constructor
    public function __construct() {
        $this->transaction_id = $_POST['transId'];
        $this->transaction_status = $_POST['transStatus']; //should be either Y (successful) or C (cancelled)
        $this->transaction_time = $_POST['transTime'];
        $this->authorisation_amount = $_POST['authAmount'];
        $this->authorisation_currency = $_POST['authCurrency'];
        $this->authorisation_amount_string = $_POST['authAmountString'];
        $this->raw_auth_message = $_POST['rawAuthMessage'];
        $this->raw_auth_code = $_POST['rawAuthCode'];
        $this->callback_password = $_POST['callbackPW'];
        $this->card_type = $_POST['cardType'];
        $this->country_match = $_POST['countryMatch']; //Y - Match, N - Mismatch, B - Not Available, I - Country not supplied, S - Issue Country not available
        $this->waf_merchant_message = $_POST['wafMerchMessage'];
        $this->authentication = $_POST['authentication'];
        $this->ip_address = $_POST['ipAddress'];
        $this->character_encoding = $_POST['charenc'];
        $this->future_payment_id = $_POST['futurePayId'];
        $this->future_payment_status_change = $_POST['futurePayStatusChange'];

        if(isset($_POST['name'])){
            $this->name = $_POST['name'];
        }

        if(isset($_POST['address'])){
            $this->address = $_POST['address'];
        }

        if(isset($_POST['town'])){
            $this->town = $_POST['town'];
        }

        if(isset($_POST['email'])){
            $this->email = $_POST['email'];
        }

        if(isset($_POST['desc'])){
            $this->desc = $_POST['desc'];
        }

        //custom properties
        $this->mc_custom_property = $_POST['MC_custom_property'];

    }
}

Upvotes: 0

Martin
Martin

Reputation: 22760

For others who are reading this from a Google search, re: worldpay Payment response.

March 2015:

I am setting up a worldpay online payment system for a client and damn, it's terrible. They have made a mediocre system in 2011 and not bothered updating it since. It is tedious and the code examples and documentation leaves a LOT to be desired.

Worldpay still use MD5() hashing as a "highly secure method of encryption" and are still referencing various resources and server concepts that are no longer used. From a practical programming point of view DO NOT USE WORLDPAY .

They have no documentation to handle dynamic payments and still expect each payment to be completed by me sending them a .html file for them to display, rather than them sending the customer back to my website to output dynamic code.

I would never touch WorldPay after this work, but my client has already paid them for signing up with them, and so I have to implement this for him. :-/

Their customer service (UK) is also very poor.

Upvotes: 1

TGuimond
TGuimond

Reputation: 5487

Problem solved. I ended up creating a custom class to handle the response from worldpay. Here is a simplified version of my handler page in case anyone else might find it useful.

(Note: I am not really a php developer so some syntax might be a bit dodgy!)

<?php //Worldpay 

// class definition
class WorldPay_Response {
    // define properties
    public $transaction_id = null;
    public $transaction_status = null;
    public $transaction_time = null;
    public $authorisation_amount = null;
    public $authorisation_currency = null;
    public $authorisation_amount_string = null;
    public $raw_auth_message = null;
    public $raw_auth_code = null;
    public $callback_password = null;
    public $card_type = null;
    public $authentication = null;
    public $ip_address = null;
    public $character_encoding = null;
    public $future_payment_id = null;
    public $future_payment_status_change = null;

    //custom properties not included by worldpay
    public $mc_custom_property = null;

    // constructor
    public function __construct() {
        $this->transaction_id = $_POST['transId'];
        $this->transaction_status = $_POST['transStatus']; //should be either Y (successful) or C (cancelled)
        $this->transaction_time = $_POST['transTime'];
        $this->authorisation_amount = $_POST['authAmount'];
        $this->authorisation_currency = $_POST['authCurrency'];
        $this->authorisation_amount_string = $_POST['authAmountString'];
        $this->raw_auth_message = $_POST['rawAuthMessage'];
        $this->raw_auth_code = $_POST['rawAuthCode'];
        $this->callback_password = $_POST['callbackPW'];
        $this->card_type = $_POST['cardType'];
        $this->country_match = $_POST['countryMatch']; //Y - Match, N - Mismatch, B - Not Available, I - Country not supplied, S - Issue Country not available
        $this->waf_merchant_message = $_POST['wafMerchMessage'];
        $this->authentication = $_POST['authentication'];
        $this->ip_address = $_POST['ipAddress'];
        $this->character_encoding = $_POST['charenc'];
        $this->future_payment_id = $_POST['futurePayId'];
        $this->future_payment_status_change = $_POST['futurePayStatusChange'];

        //custom properties
        $this->mc_custom_property = $_POST['MC_custom_property'];

    }
}

?>
<html>
<head><title>Thank you for your payment</title></head>
<WPDISPLAY FILE="header.html">

<?php
//Response from Worldpay
$wp_response = new WorldPay_Response();


    if($wp_response->transaction_status == "Y"){ ?>

            <strong>Transaction Details</strong><br />
     <?php
            echo "Worldpay Transaction id: " . $wp_response->transaction_id . "<br />";
            echo "Payment Status: " . $wp_response->transaction_status . "<br />";
            echo "Transaction Time: " . $wp_response->transaction_time . "<br />";
            echo "Amount: " . $wp_response->authorisation_amount_string . "<br />";
            echo "IP Address: " . $wp_response->ip_address . "<br /><br />"; 
        }else if($wp_response->transaction_status == "C") { ?>
            <strong>Transaction Cancelled</strong>
<?php } else { ?>
        Your transaction was unsuccessful.
<?php } ?>
<WPDISPLAY ITEM="banner">
<WPDISPLAY FILE="footer.html">
</html>

Upvotes: 4

spiffywebtools
spiffywebtools

Reputation: 77

looks a lot like paypal. basically server<>server stuff. they have their 9 yards here. http://www.worldpay.com/support/kb/bg/pdf/custa.pdf are you looking for a full blown buy service center? b/c just receiving with a simple notification is a page or so. google has some open source stuff. http://code.google.com/p/opencart/source/browse/trunk/upload/catalog/language/english/payment/worldpay.php?spec=svn694&r=694. just google worldpay.php. if you find something, LET US KNOW. we have been considering offering WORLDPAY to our clients. My how they have changed in the last 5 years.

Upvotes: 0

Related Questions