5 use POSIX qw(strftime);
8 use Business::OnlinePayment;
11 "to test set environment variables:"
12 . " (required) ELAVON_ACCOUNT, ELAVON_PASSWORD, ELAVON_CARD,"
13 . " ELAVON_CVV2, ELAVON_EXP, ELAVON_CARD_NAME, ELAVON_CARD_ADDRESS,"
14 . " ELAVON_CARD_CITY, ELAVON_CARD_STATE, ELAVON_CARD_ZIP, and ELAVON_DO_LIVE ";
17 ( $ENV{"ELAVON_ACCOUNT"} && $ENV{"ELAVON_PASSWORD"} &&
18 $ENV{"ELAVON_CARD"} && $ENV{"ELAVON_CVV2"} &&
19 $ENV{"ELAVON_EXP"} && $ENV{"ELAVON_CARD_NAME"} &&
20 $ENV{"ELAVON_CARD_ADDRESS"} && $ENV{"ELAVON_CARD_CITY"} &&
21 $ENV{"ELAVON_CARD_STATE"} && $ENV{"ELAVON_CARD_ZIP"} &&
22 $ENV{"ELAVON_DO_LIVE"}
25 : ( skip_all => $runinfo )
30 "default_ssl_user_id" => $ENV{"ELAVON_USERID"},
31 "default_ssl_salestax" => "0.00",
32 "default_ssl_customer_code" => "LIVETESTCUSTOMER",
36 login => $ENV{"ELAVON_ACCOUNT"},
37 password => $ENV{"ELAVON_PASSWORD"},
38 action => "Normal Authorization",
40 description => "Business::OnlinePayment::ElavonVirtualMerchant live test",
41 card_number => $ENV{"ELAVON_CARD"},
42 cvv2 => $ENV{"ELAVON_CVV2"},
43 expiration => $ENV{"ELAVON_EXP"},
45 invoice_number => "LiveTest",
46 name => $ENV{"ELAVON_CARD_NAME"},
47 address => $ENV{"ELAVON_CARD_ADDRESS"},
48 city => $ENV{"ELAVON_CARD_CITY"},
49 state => $ENV{"ELAVON_CARD_STATE"},
50 zip => $ENV{"ELAVON_CARD_ZIP"},
53 my $credit_amount = 0;
55 { # valid card number test
56 my $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
57 $tx->content(%content);
60 desc => "valid card_number",
63 authorization => qr/^\w{6}$/,
66 order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
68 $credit_amount += $content{amount} if $tx->is_success;
71 { # invalid card number test
73 my $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
74 $tx->content( %content, card_number => "4111111111111112" );
77 desc => "invalid card_number",
80 authorization => qr/^$/,
82 cvv2_response => undef,
83 order_number => qr/^$/,
88 { # avs_code() / AVSZIP and AVSADDR tests
90 my $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
92 $tx->content( %content, "address" => "500 Any street" );
95 desc => "AVSADDR=N,AVSZIP=Y",
98 authorization => qr/^\w{6}$/,
100 cvv2_response => "M",
101 order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
103 $credit_amount += $content{amount} if $tx->is_success;
105 $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
106 $tx->content( %content, "zip" => "99999" );
109 desc => "AVSADDR=Y,AVSZIP=N",
112 authorization => qr/^\w{6}$/,
114 cvv2_response => "M",
115 order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
117 $credit_amount += $content{amount} if $tx->is_success;
119 $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
120 $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
123 desc => "AVSADDR=N,AVSZIP=N",
126 authorization => qr/^\w{6}$/,
128 cvv2_response => "M",
129 order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
131 $credit_amount += $content{amount} if $tx->is_success;
134 { # cvv2_response() / CVV2MATCH
136 my $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
138 $tx->content( %content, "cvv2" => $content{cvv2}+1 );
141 desc => "wrong cvv2",
144 authorization => qr/^\w{6}$/,
146 cvv2_response => "N",
147 order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
149 $credit_amount += $content{amount} if $tx->is_success;
153 SKIP: { # refund test
155 skip "Refund tests require account with refund capability", 6;
157 my $tx = new Business::OnlinePayment( "ElavonVirtualMerchant", %opts );
158 $tx->content( %content, 'action' => "Credit",
159 'amount' => sprintf("%.2f", $credit_amount),
163 desc => "refund/credit",
166 authorization => qr/^$/,
168 cvv2_response => undef,
169 order_number => qr/^$/,
179 is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
180 is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
181 like( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
182 is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
183 is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
184 like( $tx->order_number, $o{order_number}, "order_number() / PNREF" );
190 no warnings 'uninitialized';
194 "is_success(", $tx->is_success, ")",
195 " order_number(", $tx->order_number, ")",
196 " result_code(", $tx->result_code, ")",
197 " auth_info(", $tx->authorization, ")",
198 " avs_code(", $tx->avs_code, ")",
199 " cvv2_response(", $tx->cvv2_response, ")",