5 use POSIX qw(strftime);
8 use Business::OnlinePayment;
11 "to test set environment variables:"
12 . " (required) PFPRO_VENDOR PFPRO_USER PFPRO_PWD and CLIENTCERTID (for X-VPS-VIT-CLIENT-CERTIFICATION-ID); "
13 . " (optional) PFPRO_PARTNER PFPRO_CERT_PATH";
16 ( $ENV{"PFPRO_USER"} && $ENV{"PFPRO_VENDOR"} && $ENV{"PFPRO_PWD"} )
18 : ( skip_all => $runinfo )
23 "vendor" => $ENV{PFPRO_VENDOR},
24 "partner" => $ENV{PFPRO_PARTNER} || "verisign",
25 ( $ENV{PFPRO_CERT_PATH} ? ( "cert_path" => $ENV{PFPRO_CERT_PATH} ) : () ),
27 $ENV{CLIENTCERTID} ? (
29 "X-VPS-VIT-CLIENT-CERTIFICATION-ID" => $ENV{CLIENTCERTID},
31 # "X-VPS-REQUEST-ID" => $self->request_id(),
32 # "X-VPS-CLIENT-TIMEOUT" => , # default 45 seconds
33 # "X-VPS-VIT-CLIENT-DURATION" => , # commit request
41 login => $ENV{"PFPRO_USER"},
42 password => $ENV{"PFPRO_PWD"},
43 action => "Normal Authorization",
45 description => "Business::OnlinePayment::PayflowPro test",
46 card_number => "4111111111111111",
48 expiration => "12/" . strftime( "%y", localtime ),
52 email => 'ivan-payflowpro@420.am',
53 address => "123 Anystreet",
60 { # valid card number test
61 my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
62 $tx->content(%content);
65 desc => "valid card_number",
68 error_message => "Approved",
69 authorization => "010101",
75 { # invalid card number test
76 my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
77 $tx->content( %content, card_number => "4111111111111112" );
80 desc => "invalid card_number",
83 error_message => "Invalid account number",
84 authorization => undef,
90 { # avs_code() / AVSZIP and AVSADDR tests
91 my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
93 # IF first 3 chars of STREET <= 334 and >= 666 THEN AVSADDR == "N"
94 $tx->content( %content, "address" => "500 Any street" );
97 desc => "AVSADDR=N,AVSZIP=Y",
100 error_message => "Under review by Fraud Service",
101 authorization => "010101",
106 # IF first 3 chars of STREET >= 667 THEN AVSADDR == "X" (and AVSZIP="X")
107 $tx = new Business::OnlinePayment( "PayflowPro", %opts );
108 $tx->content( %content, "address" => "700 Any street" );
111 desc => "AVSADDR=X,AVSZIP=X",
114 error_message => "Approved",
115 authorization => "010101",
120 # IF ZIP <= 50001 and >= 99999 THEN AVSZIP == "N"
121 $tx = new Business::OnlinePayment( "PayflowPro", %opts );
122 $tx->content( %content, "zip" => "99999" );
125 desc => "AVSADDR=Y,AVSZIP=N",
128 error_message => "Under review by Fraud Service",
129 authorization => "010101",
134 # Both AVSADDR and AVSZIP == "N"
135 $tx = new Business::OnlinePayment( "PayflowPro", %opts );
136 $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
139 desc => "AVSADDR=N,AVSZIP=N",
142 error_message => "Under review by Fraud Service",
143 authorization => "010101",
149 { # cvv2_code() / CVV2MATCH
150 my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
152 # IF CVV2 >= 301 and <= 600 THEN CVV2MATCH == "N"
153 $tx->content( %content, "cvv2" => "301" );
159 error_message => "Under review by Fraud Service",
160 authorization => "010101",
165 # IF CVV2 >= 601 THEN CVV2MATCH == "X"
166 $tx = new Business::OnlinePayment( "PayflowPro", %opts );
167 $tx->content( %content, "cvv2" => "601" );
173 error_message => "Under review by Fraud Service",
174 authorization => "010101",
184 $tx->test_transaction(1);
187 is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
188 is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
189 is( $tx->error_message, $o{error_message}, "error_message() / RESPMSG" );
190 is( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
191 is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
192 is( $tx->cvv2_code, $o{cvv2_code}, "cvv2_code() / CVV2MATCH" );
193 like( $tx->order_number, qr/^\w{12}/, "order_number() / PNREF" );
199 no warnings 'uninitialized';
203 "is_success(", $tx->is_success, ")",
204 " order_number(", $tx->order_number, ")",
205 " error_message(", $tx->error_message, ")",
206 " result_code(", $tx->result_code, ")",
207 " auth_info(", $tx->authorization, ")",
208 " avs_code(", $tx->avs_code, ")",
209 " cvv2_code(", $tx->cvv2_code, ")",