5 use POSIX qw(strftime);
8 use Business::OnlinePayment;
11 "to test set environment variables:"
12 . " (required) ELINK_ACCOUNT, ELINK_PASSWORD, ELINK_CARD,"
13 . " ELINK_CVV2, ELINK_EXP, ELINK_CARD_NAME, ELINK_CARD_ADDRESS,"
14 . " ELINK_CARD_CITY, ELINK_CARD_STATE, ELINK_CARD_ZIP, and ELINK_DO_LIVE ";
17 ( $ENV{"ELINK_ACCOUNT"} && $ENV{"ELINK_PASSWORD"} &&
18 $ENV{"ELINK_CARD"} && $ENV{"ELINK_CVV2"} &&
19 $ENV{"ELINK_EXP"} && $ENV{"ELINK_CARD_NAME"} &&
20 $ENV{"ELINK_CARD_ADDRESS"} && $ENV{"ELINK_CARD_CITY"} &&
21 $ENV{"ELINK_CARD_STATE"} && $ENV{"ELINK_CARD_ZIP"} &&
25 : ( skip_all => $runinfo )
30 "merchantcustservnum" => "8005551212",
34 login => $ENV{"ELINK_ACCOUNT"},
35 password => $ENV{"ELINK_PASSWORD"},
36 action => "Normal Authorization",
38 description => "Business::OnlinePayment::TransFirsteLink live test",
39 card_number => $ENV{"ELINK_CARD"},
40 cvv2 => $ENV{"ELINK_CVV2"},
41 expiration => $ENV{"ELINK_EXP"},
43 invoice_number => "LiveTest",
44 name => $ENV{"ELINK_CARD_NAME"},
45 address => $ENV{"ELINK_CARD_ADDRESS"},
46 city => $ENV{"ELINK_CARD_CITY"},
47 state => $ENV{"ELINK_CARD_STATE"},
48 zip => $ENV{"ELINK_CARD_ZIP"},
52 my $credit_amount = 0;
54 { # valid card number test
55 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
56 $tx->content(%content);
59 desc => "valid card_number",
62 authorization => qr/^\w{6}$/,
63 avs_code => "Y", # useless
66 $voidable = $tx->order_number if $tx->is_success;
69 { # invalid card number test
71 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
72 $tx->content( %content, card_number => "4111111111111112" );
75 desc => "invalid card_number",
78 authorization => qr/^$/,
85 { # avs_code() / AVSZIP and AVSADDR tests
87 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
89 $tx->content( %content, "address" => "500 Any street" );
92 desc => "AVSADDR=N,AVSZIP=Y",
95 authorization => qr/^\w{6}$/,
99 $credit_amount += $content{amount} if $tx->is_success;
101 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
102 $tx->content( %content, "zip" => "99999" );
105 desc => "AVSADDR=Y,AVSZIP=N",
107 result_code => "000",
108 authorization => qr/^\w{6}$/,
110 cvv2_response => "M",
112 $credit_amount += $content{amount} if $tx->is_success;
114 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
115 $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
118 desc => "AVSADDR=N,AVSZIP=N",
120 result_code => "000",
121 authorization => qr/^\w{6}$/,
123 cvv2_response => "M",
125 $credit_amount += $content{amount} if $tx->is_success;
128 { # cvv2_response() / CVV2MATCH
130 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
132 $tx->content( %content, "cvv2" => $content{cvv2}+1 );
135 desc => "wrong cvv2",
137 result_code => "000",
138 authorization => qr/^\w{6}$/,
140 cvv2_response => "N",
147 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
148 $tx->content( %content, 'action' => "Credit",
149 'amount' => sprintf("%.2f", $credit_amount),
153 desc => "refund/credit",
155 result_code => "000",
156 authorization => qr/^$/,
164 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
165 $tx->content( %content, 'action' => "Void",
166 'order_number' => $voidable
172 result_code => "000",
173 authorization => qr/^$/,
185 is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
186 is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
187 like( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
188 is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
189 is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
190 is( scalar(@{$tx->junk}), 0, "junk() / JUNK " );
191 like( $tx->order_number, qr/^(\d{14}|)$/, "order_number() / PNREF" );
197 no warnings 'uninitialized';
201 "is_success(", $tx->is_success, ")",
202 " order_number(", $tx->order_number, ")",
203 " result_code(", $tx->result_code, ")",
204 " auth_info(", $tx->authorization, ")",
205 " avs_code(", $tx->avs_code, ")",
206 " cvv2_response(", $tx->cvv2_response, ")",
207 $tx->junk ? " junk(". join('|', @{$tx->junk}). ")" : '',