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 => '[email protected]',
           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}