SYNOPSIS

use Business::PxPay;

my $pxpay = Business::PxPay->new(
    userid => 'TestAccount',
    key    => 'c9fff215b9e2add78d252b78e214880b46a906e73190a380483c1c29acab4157'
);

# when submit the cart order
if ( $submit_order ) {
    my $rtn = $pxpay->request($args); # $args from CGI params
    if ( exists $rtn->{valid} and $rtn->{valid} == 1 ) {
        print $q->redirect( $rtn->{URI} );
    } else {
        die Dumper(\$rtn);
    }
}
# when user returns back from pxpal
elsif ( $in_return_or_cancel_page or $params->{result} ) {
    my $rtn = $pxpay->result($params->{result});
    if ( exists $rtn->{valid} and $rtn->{valid} == 1 ) {
        print "Transaction Success!\n";
    } else {
        print "Transaction Failed!\n";
    }
}

DESCRIPTION

PX Pay - Payment Express http://www.paymentexpress.com/

new

my $pxpay = Business::PxPay->new(
    userid => $user,
    key    => $key
);
  • userid (required)

  • key (required)

    PxPayUserId & PxPayKey

  • ua

  • ua_args

    By default, we use LWP::UserAgent->new as the UserAgent. you can pass ua or ua_args to use a different one.

  • url

    my $pxpay = Business::PxPay->new(
        userid => $user,
        key    => $key,
        url    => 'https://sec2.paymentexpress.com/pxpay/pxaccess.aspx', # to test?
    );

    The URL is 'https://www.paymentexpress.com/pxpay/pxaccess.aspx' by default.

Arguments

All those arguments can be passed into Business::PxPay->new() or pass into $pxpay->request later

{
    TxnType => 'Purchase',
    Amount  => 10.9,
    UrlFail => 'http://test.com',
    UrlSuccess => 'http://example.com',
    MerchantReference => 'Test Transaction',
    EmailAddress => 'test@example.com',
    TxnData1 => 'test=A',
    TxnData2 => 'data2=B',
    TxnData3 => 'data3=C',
};
  • Amount (required)

    Amount value in d.cc format

  • Currency (required)

    http://www.paymentexpress.com/technical_resources/ecommerce_hosted/pxpay.html#currencyinput

  • UrlFail (required)

    URL of the merchant transaction failure page. No parameters ("&" or "?") are permitted.

  • UrlSuccess (required)

    URL of the merchant transaction success page. No parameters ("&" or "?") are permitted.

  • TxnType (required)

    "Auth" or "Purchase"

  • MerchantReference (required)

    Reference field to appear on transaction reports

  • BillingId

    Optional identifier when adding a card for recurring billing

  • EmailAddress

    Optional email address

  • EnableAddBillCard

    Required when adding a card to the DPS system for recurring billing. Set element to "1" for true

  • TxnId

    A value that uniquely identifies the transaction

  • TxnData1

  • TxnData2

  • TxnData3

    Optional free text

  • Opt

    Optional additional parameter

request

my $xml = $pxpay->request_xml($args);
my $rtn = $pxpay->request($args);

request and parse the response XML into HASHREF. sample:

$VAR1 = \{
    'URI' => 'https://sec2.paymentexpress.com/pxpay/pxpay.aspx?userid=
TestAccount&request=v51flwn7rvSNcbY86uRMdJ74XB2gHd8ZY-WHqyEYoPm9xd1ROXX00pXYkkuk
dleLlS402E65EjOSCkrqvmAsZUWRCck8RkmIJcRLvG0KZLi7PQRBfpIQ0wzKwdHGKvBCpqhRH6Tx-w93
MRYsP0ThOK4btgTneR_hGEk0supyLeE1taNWCkyFj8KX7rzZ9ncdWRlmciNBsiV4zX4DQ_7Poi9qiblI
5o0Gm49yb90kUlUtH1hrV3ulzidQbn0CcQKhHFKGX8IVMXiAtVN29r_Cgdzc7dOrwOxY-LBY2h4Or5GQ
hJHB96kjBziu3GyGBvaGfsosNodT3-wyM29A5M-Z62ITkno6JUA6H4',
    'valid' => '1'
};

Usually you need redirect to the $rtn->{URI} when valid is 1

result

my $xml = $pxpay->result_xml($ResponseCode);
my $rtn = $pxpay->result($ResponseCode);
if ( exists $rtn->{valid} and $rtn->{valid} == 1 ) {
    print "Transaction Success!\n";
} else {
    print "Transaction Failed!\n";
}

PxPay will POST to your UrlSuccess (or UrlFail) when you finish the transaction (or click Cancel button). the POST would contain a param result which you can request to get the transaction status.

TIPS

I need params in UrlSuccess

For example, you want your UrlSuccess to be 'http://mysite.com/cgi-bin/cart.cgi?cart_id=ABC'.

you need write the request like:

my $rtn = $pxpay->request(
    # others
    UrlSuccess => 'http://mysite.com/cgi-bin/cart.cgi',
    TxnData1 => 'ABC',
);

and you can get the TxnData1 in

my $rtn = $pxpay->result($ResponseCode);
my $cart_id = $rtn->{TxnData1}