0.03
[Business-OnlinePayment-USAePay.git] / t / USAePay.t
1 # Before `make install' is performed this script should be runnable with
2 # `make test'. After `make install' it should work as `perl eWay.t'
3
4 use Test;
5 require "t/lib/test_account.pl";
6
7 BEGIN { plan tests => 404 };
8 use Business::OnlinePayment::USAePay;
9
10 my %auth = test_account();
11
12 # a test transaction
13 my ($tx, $txnum, $res);
14 ok($tx = new Business::OnlinePayment("USAePay"));
15 $tx->test_transaction(2);
16 ok(
17     $tx->content(
18         type           => 'CC',
19         %auth,
20         action         => 'Normal Authorization',
21         description    => 'Business::OnlinePayment test',
22         amount         => '49.95',
23         invoice_number => '100100',
24         name           => 'Tofu Beast',
25         card_number    => '4005562233445564',
26         expiration     => expiration_date(),
27         address        => '1234 Bean Curd Lane, San Francisco',
28         zip            => '94102',
29     )
30 );
31 ok($tx->submit());
32 ok($tx->is_success());
33 ok($tx->error_message(), 'Approved');
34 ok($tx->authorization(), '/\d{6}/');
35 ok($res = $tx->server_response());
36 ok($txnum = $res->{UMauthCode});
37 ok($res->{UMavsResultCode}, "YYY");
38 ok($res->{UMresult}, "A");
39 ok($res->{UMcvv2Result}, "Not Processed");
40 ok($res->{UMversion}, "2.9");
41 ok($res->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
42 ok($res->{UMrefNum}, qr/^\d+/);
43 ok($res->{UMbatch}, qr/^\d+/);
44 ok($res->{UMerrorcode}, "00000");
45 ok($res->{UMvpasResultCode}, "");
46 ok($res->{UMcvv2ResultCode}, "P");
47
48 #resubmit test
49 ok($tx->submit());
50 ok(($tx->server_response->{UMauthCode} - $txnum) > 0);
51
52 # a test transaction with cvn
53 ok(
54     $tx->content(
55         type           => 'CC',
56         %auth,
57         action         => 'Normal Authorization',
58         description    => 'Business::OnlinePayment test',
59         amount         => '49.95',
60         invoice_number => '100100',
61         name           => 'Tofu Beast',
62         card_number    => '4005562233445564',
63         expiration     => expiration_date(),
64         cvv2           => '123',
65         address        => '1234 Bean Curd Lane, San Francisco',
66         zip            => '94102',
67     )
68 );
69 ok($tx->submit());
70 ok($tx->is_success());
71 ok($tx->error_message(), 'Approved');
72 ok($tx->authorization(), '/\d{6}/');
73 ok($tx->server_response->{UMcvv2Result}, "No Match"); #"Not Processed");
74
75 # a failing transaction
76 ok(
77     $tx->content(
78         type           => 'CC',
79         %auth,
80         action         => 'Normal Authorization',
81         description    => 'Business::OnlinePayment test',
82         amount         => '49.95',
83         invoice_number => '100100',
84         name           => 'Tofu Beast',
85         first_name     => 'Tofu',
86         last_name      => 'Beast',
87         email          => 'tofu@example.com',
88         address        => '1234 Bean Curd Lane, Sydney',
89         zip            => '2034',
90         card_number    => '4646464646464646',
91         expiration     => expiration_date(),
92         cvv2           => '123',
93     )
94 );
95
96 #ok($tx->test_transaction(0),0);
97 ok($tx->test_transaction(2),2);
98
99 ok($tx->submit());
100 ok($tx->is_success(),0);
101 ok($tx->error_message(), 'Invalid Card Number (3)');
102 ok($tx->authorization(), '/\d{6}/');
103 ok($tx->server_response->{UMcvv2Result}, "No CVV2/CVC data available for transaction.");
104
105 #various test cards; semi-useful testing
106 #Full match avs, zip9 & cvv2
107 ok(
108     $tx->content(
109         type           => 'CC',
110         %auth,
111         action         => 'Normal Authorization',
112         description    => 'Business::OnlinePayment test',
113         amount         => '49.95',
114         invoice_number => '100100',
115         name           => 'Tofu Beast',
116         card_number    => '4000100011112224',
117         expiration     => expiration_date(),
118         address        => '1234 Bean Curd Lane, San Francisco',
119         zip            => '94102',
120         cvv2           => '102',
121     )
122 );
123 ok($tx->submit());
124 ok($tx->is_success());
125 ok($tx->error_message(), 'Approved');
126 ok($tx->authorization(), '/\d{6}/');
127 ok($tx->server_response->{UMavsResultCode}, "YYY");
128 ok($tx->server_response->{UMresult}, "A");
129 ok($tx->server_response->{UMcvv2Result}, "Match");
130 ok($tx->server_response->{UMversion}, "2.9");
131 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
132 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
133 ok($tx->server_response->{UMerrorcode}, "00000");
134 ok($tx->server_response->{UMbatch}, qr/^\d+/);
135
136 #Full match avs, zip9 & cvv2
137 ok(
138     $tx->content(
139         type           => 'CC',
140         %auth,
141         action         => 'Normal Authorization',
142         description    => 'Business::OnlinePayment test',
143         amount         => '49.95',
144         invoice_number => '100100',
145         name           => 'Tofu Beast',
146         card_number    => '4000100111112223',
147         expiration     => expiration_date(),
148         address        => '1234 Bean Curd Lane, San Francisco',
149         zip            => '94102',
150         cvv2           => '102',
151     )
152 );
153 ok($tx->submit());
154 ok($tx->is_success());
155 ok($tx->error_message(), 'Approved');
156 ok($tx->authorization(), '/\d{6}/');
157 ok($tx->server_response->{UMavsResultCode}, "YYX");
158 ok($tx->server_response->{UMresult}, "A");
159 ok($tx->server_response->{UMcvv2Result}, "Match");
160 ok($tx->server_response->{UMversion}, "2.9");
161 ok($tx->server_response->{UMavsResult}, "Address: Match & 9 Digit Zip: Match");
162 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
163 ok($tx->server_response->{UMerrorcode}, "00000");
164 ok($tx->server_response->{UMbatch}, qr/^\d+/);
165 ok($tx->server_response->{UMvpasResultCode}, "");
166 ok($tx->server_response->{UMcvv2ResultCode}, "M");
167
168 #no match avs, match zip5 & cvv2
169 ok(
170     $tx->content(
171         type           => 'CC',
172         %auth,
173         action         => 'Normal Authorization',
174         description    => 'Business::OnlinePayment test',
175         amount         => '49.95',
176         invoice_number => '100100',
177         name           => 'Tofu Beast',
178         card_number    => '4000100211112222',
179         expiration     => expiration_date(),
180         address        => '1234 Bean Curd Lane, San Francisco',
181         zip            => '94102',
182         cvv2           => '102',
183     )
184 );
185 ok($tx->submit());
186 ok($tx->is_success());
187 ok($tx->error_message(), 'Approved');
188 ok($tx->authorization(), '/\d{6}/');
189 ok($tx->server_response->{UMavsResultCode}, "NYZ");
190 ok($tx->server_response->{UMresult}, "A");
191 ok($tx->server_response->{UMcvv2Result}, "Match");
192 ok($tx->server_response->{UMversion}, "2.9");
193 ok($tx->server_response->{UMavsResult}, "Address: No Match & 5 Digit Zip: Match");
194 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
195 ok($tx->server_response->{UMerrorcode}, "00000");
196 ok($tx->server_response->{UMbatch}, qr/^\d+/);
197 ok($tx->server_response->{UMvpasResultCode}, "");
198 ok($tx->server_response->{UMcvv2ResultCode}, "M");
199
200 # no match address, match zip9 & cvv2
201 ok(
202     $tx->content(
203         type           => 'CC',
204         %auth,
205         action         => 'Normal Authorization',
206         description    => 'Business::OnlinePayment test',
207         amount         => '49.95',
208         invoice_number => '100100',
209         name           => 'Tofu Beast',
210         card_number    => '4000100311112221',
211         expiration     => expiration_date(),
212         address        => '1234 Bean Curd Lane, San Francisco',
213         zip            => '94102',
214         cvv2           => '102',
215     )
216 );
217 ok($tx->submit());
218 ok($tx->is_success());
219 ok($tx->error_message(), 'Approved');
220 ok($tx->authorization(), '/\d{6}/');
221 ok($tx->server_response->{UMavsResultCode}, "NYW");
222 ok($tx->server_response->{UMresult}, "A");
223 ok($tx->server_response->{UMcvv2Result}, "Match");
224 ok($tx->server_response->{UMversion}, "2.9");
225 ok($tx->server_response->{UMavsResult}, "Address: No Match & 9 Digit Zip: Match");
226 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
227 ok($tx->server_response->{UMerrorcode}, "00000");
228 ok($tx->server_response->{UMbatch}, qr/^\d+/);
229 ok($tx->server_response->{UMvpasResultCode}, "");
230 ok($tx->server_response->{UMcvv2ResultCode}, "M");
231
232 # match address, no match zip5 & match cvv2
233 ok(
234     $tx->content(
235         type           => 'CC',
236         %auth,
237         action         => 'Normal Authorization',
238         description    => 'Business::OnlinePayment test',
239         amount         => '49.95',
240         invoice_number => '100100',
241         name           => 'Tofu Beast',
242         card_number    => '4000100411112220',
243         expiration     => expiration_date(),
244         address        => '1234 Bean Curd Lane, San Francisco',
245         zip            => '94102',
246         cvv2           => '102',
247     )
248 );
249 ok($tx->submit());
250 ok($tx->is_success());
251 ok($tx->error_message(), 'Approved');
252 ok($tx->authorization(), '/\d{6}/');
253 ok($tx->server_response->{UMavsResultCode}, "YNA");
254 ok($tx->server_response->{UMresult}, "A");
255 ok($tx->server_response->{UMcvv2Result}, "Match");
256 ok($tx->server_response->{UMversion}, "2.9");
257 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: No Match");
258 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
259 ok($tx->server_response->{UMerrorcode}, "00000");
260 ok($tx->server_response->{UMbatch}, qr/^\d+/);
261 ok($tx->server_response->{UMvpasResultCode}, "");
262 ok($tx->server_response->{UMcvv2ResultCode}, "M");
263
264 # no match address, zip5 & match cvv2
265 ok(
266     $tx->content(
267         type           => 'CC',
268         %auth,
269         action         => 'Normal Authorization',
270         description    => 'Business::OnlinePayment test',
271         amount         => '49.95',
272         invoice_number => '100100',
273         name           => 'Tofu Beast',
274         card_number    => '4000100511112229',
275         expiration     => expiration_date(),
276         address        => '1234 Bean Curd Lane, San Francisco',
277         zip            => '94102',
278         cvv2           => '102',
279     )
280 );
281 ok($tx->submit());
282 ok($tx->is_success());
283 ok($tx->error_message(), 'Approved');
284 ok($tx->authorization(), '/\d{6}/');
285 ok($tx->server_response->{UMavsResultCode}, "NNN");
286 ok($tx->server_response->{UMresult}, "A");
287 ok($tx->server_response->{UMcvv2Result}, "Match");
288 ok($tx->server_response->{UMversion}, "2.9");
289 ok($tx->server_response->{UMavsResult}, "Address: No Match & 5 Digit Zip: No Match");
290 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
291 ok($tx->server_response->{UMerrorcode}, "00000");
292 ok($tx->server_response->{UMbatch}, qr/^\d+/);
293 ok($tx->server_response->{UMvpasResultCode}, "");
294 ok($tx->server_response->{UMcvv2ResultCode}, "M");
295
296 # card number not on avs file
297 ok(
298     $tx->content(
299         type           => 'CC',
300         %auth,
301         action         => 'Normal Authorization',
302         description    => 'Business::OnlinePayment test',
303         amount         => '49.95',
304         invoice_number => '100100',
305         name           => 'Tofu Beast',
306         card_number    => '4000100611112228',
307         expiration     => expiration_date(),
308         address        => '1234 Bean Curd Lane, San Francisco',
309         zip            => '94102',
310         cvv2           => '102',
311     )
312 );
313 ok($tx->submit());
314 ok($tx->is_success());
315 ok($tx->error_message(), 'Approved');
316 ok($tx->authorization(), '/\d{6}/');
317 ok($tx->server_response->{UMavsResultCode}, "XXW");
318 ok($tx->server_response->{UMresult}, "A");
319 ok($tx->server_response->{UMcvv2Result}, "Match");
320 ok($tx->server_response->{UMversion}, "2.9");
321 ok($tx->server_response->{UMavsResult}, "Card Number Not On File");
322 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
323 ok($tx->server_response->{UMerrorcode}, "00000");
324 ok($tx->server_response->{UMbatch}, qr/^\d+/);
325 ok($tx->server_response->{UMvpasResultCode}, "");
326 ok($tx->server_response->{UMcvv2ResultCode}, "M");
327
328 # not verified
329 ok(
330     $tx->content(
331         type           => 'CC',
332         %auth,
333         action         => 'Normal Authorization',
334         description    => 'Business::OnlinePayment test',
335         amount         => '49.95',
336         invoice_number => '100100',
337         name           => 'Tofu Beast',
338         card_number    => '4000100711112227',
339         expiration     => expiration_date(),
340         address        => '1234 Bean Curd Lane, San Francisco',
341         zip            => '94102',
342         cvv2           => '102',
343     )
344 );
345 ok($tx->submit());
346 ok($tx->is_success());
347 ok($tx->error_message(), 'Approved');
348 ok($tx->authorization(), '/\d{6}/');
349 ok($tx->server_response->{UMavsResultCode}, "XXU");
350 ok($tx->server_response->{UMresult}, "A");
351 ok($tx->server_response->{UMcvv2Result}, "Match");
352 ok($tx->server_response->{UMversion}, "2.9");
353 ok($tx->server_response->{UMavsResult}, "Address Information not verified for domestic transaction");
354 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
355 ok($tx->server_response->{UMerrorcode}, "00000");
356 ok($tx->server_response->{UMbatch}, qr/^\d+/);
357 ok($tx->server_response->{UMvpasResultCode}, "");
358 ok($tx->server_response->{UMcvv2ResultCode}, "M");
359
360 # retry avs   
361 ok(
362     $tx->content(
363         type           => 'CC',
364         %auth,
365         action         => 'Normal Authorization',
366         description    => 'Business::OnlinePayment test',
367         amount         => '49.95',
368         invoice_number => '100100',
369         name           => 'Tofu Beast',
370         card_number    => '4000100811112226',
371         expiration     => expiration_date(),
372         address        => '1234 Bean Curd Lane, San Francisco',
373         zip            => '94102',
374         cvv2           => '102',
375     )
376 );
377 ok($tx->submit());
378 ok($tx->is_success());
379 ok($tx->error_message(), 'Approved');
380 ok($tx->authorization(), '/\d{6}/');
381 ok($tx->server_response->{UMavsResultCode}, "XXR");
382 ok($tx->server_response->{UMresult}, "A");
383 ok($tx->server_response->{UMcvv2Result}, "Match");
384 ok($tx->server_response->{UMversion}, "2.9");
385 ok($tx->server_response->{UMavsResult}, "Retry / System Unavailable");
386 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
387 ok($tx->server_response->{UMerrorcode}, "00000");
388 ok($tx->server_response->{UMbatch}, qr/^\d+/);
389 ok($tx->server_response->{UMvpasResultCode}, "");
390 ok($tx->server_response->{UMcvv2ResultCode}, "M");
391
392 # avs not supported
393 ok(
394     $tx->content(
395         type           => 'CC',
396         %auth,
397         action         => 'Normal Authorization',
398         description    => 'Business::OnlinePayment test',
399         amount         => '49.95',
400         invoice_number => '100100',
401         name           => 'Tofu Beast',
402         card_number    => '4000100911112225',
403         expiration     => expiration_date(),
404         address        => '1234 Bean Curd Lane, San Francisco',
405         zip            => '94102',
406         cvv2           => '102',
407     )
408 );
409 ok($tx->submit());
410 ok($tx->is_success());
411 ok($tx->error_message(), 'Approved');
412 ok($tx->authorization(), '/\d{6}/');
413 ok($tx->server_response->{UMavsResultCode}, "XXS");
414 ok($tx->server_response->{UMresult}, "A");
415 ok($tx->server_response->{UMcvv2Result}, "Match");
416 ok($tx->server_response->{UMversion}, "2.9");
417 ok($tx->server_response->{UMavsResult}, "Service Not Supported");
418 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
419 ok($tx->server_response->{UMerrorcode}, "00000");
420 ok($tx->server_response->{UMbatch}, qr/^\d+/);
421 ok($tx->server_response->{UMvpasResultCode}, "");
422 ok($tx->server_response->{UMcvv2ResultCode}, "M");
423
424 # avs not allowed for card type
425 ok(
426     $tx->content(
427         type           => 'CC',
428         %auth,
429         action         => 'Normal Authorization',
430         description    => 'Business::OnlinePayment test',
431         amount         => '49.95',
432         invoice_number => '100100',
433         name           => 'Tofu Beast',
434         card_number    => '4000101011112222',
435         expiration     => expiration_date(),
436         address        => '1234 Bean Curd Lane, San Francisco',
437         zip            => '94102',
438         cvv2           => '102',
439     )
440 );
441 ok($tx->submit());
442 ok($tx->is_success());
443 ok($tx->error_message(), 'Approved');
444 ok($tx->authorization(), '/\d{6}/');
445 ok($tx->server_response->{UMavsResultCode}, "XXE");
446 ok($tx->server_response->{UMresult}, "A");
447 ok($tx->server_response->{UMcvv2Result}, "Match");
448 ok($tx->server_response->{UMversion}, "2.9");
449 ok($tx->server_response->{UMavsResult}, "Address Verification Not Allowed For Card Type");
450 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
451 ok($tx->server_response->{UMerrorcode}, "00000");
452 ok($tx->server_response->{UMbatch}, qr/^\d+/);
453 ok($tx->server_response->{UMvpasResultCode}, "");
454 ok($tx->server_response->{UMcvv2ResultCode}, "M");
455
456 # global non-avs participant
457 ok(
458     $tx->content(
459         type           => 'CC',
460         %auth,
461         action         => 'Normal Authorization',
462         description    => 'Business::OnlinePayment test',
463         amount         => '49.95',
464         invoice_number => '100100',
465         name           => 'Tofu Beast',
466         card_number    => '4000101111112221',
467         expiration     => expiration_date(),
468         address        => '1234 Bean Curd Lane, San Francisco',
469         zip            => '94102',
470         cvv2           => '102',
471     )
472 );
473 ok($tx->submit());
474 ok($tx->is_success());
475 ok($tx->error_message(), 'Approved');
476 ok($tx->authorization(), '/\d{6}/');
477 ok($tx->server_response->{UMavsResultCode}, "XXG");
478 ok($tx->server_response->{UMresult}, "A");
479 ok($tx->server_response->{UMcvv2Result}, "Match");
480 ok($tx->server_response->{UMversion}, "2.9");
481 ok($tx->server_response->{UMavsResult}, "Global Non-AVS participant");
482 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
483 ok($tx->server_response->{UMerrorcode}, "00000");
484 ok($tx->server_response->{UMbatch}, qr/^\d+/);
485 ok($tx->server_response->{UMvpasResultCode}, "");
486 ok($tx->server_response->{UMcvv2ResultCode}, "M");
487
488 # international address match, zip incompat
489 ok(
490     $tx->content(
491         type           => 'CC',
492         %auth,
493         action         => 'Normal Authorization',
494         description    => 'Business::OnlinePayment test',
495         amount         => '49.95',
496         invoice_number => '100100',
497         name           => 'Tofu Beast',
498         card_number    => '4000101211112220',
499         expiration     => expiration_date(),
500         address        => '1234 Bean Curd Lane, San Francisco',
501         zip            => '94102',
502         cvv2           => '102',
503     )
504 );
505 ok($tx->submit());
506 ok($tx->is_success());
507 ok($tx->error_message(), 'Approved');
508 ok($tx->authorization(), '/\d{6}/');
509 ok($tx->server_response->{UMavsResultCode}, "YYG");
510 ok($tx->server_response->{UMresult}, "A");
511 ok($tx->server_response->{UMcvv2Result}, "Match");
512 ok($tx->server_response->{UMversion}, "2.9");
513 ok($tx->server_response->{UMavsResult}, "International Address: Match & Postal: Not Compatible");
514 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
515 ok($tx->server_response->{UMerrorcode}, "00000");
516 ok($tx->server_response->{UMbatch}, qr/^\d+/);
517 ok($tx->server_response->{UMvpasResultCode}, "");
518 ok($tx->server_response->{UMcvv2ResultCode}, "M");
519
520 # international address match, zip 
521 ok(
522     $tx->content(
523         type           => 'CC',
524         %auth,
525         action         => 'Normal Authorization',
526         description    => 'Business::OnlinePayment test',
527         amount         => '49.95',
528         invoice_number => '100100',
529         name           => 'Tofu Beast',
530         card_number    => '4000101311112229',
531         expiration     => expiration_date(),
532         address        => '1234 Bean Curd Lane, San Francisco',
533         zip            => '94102',
534         cvv2           => '102',
535     )
536 );
537 ok($tx->submit());
538 ok($tx->is_success());
539 ok($tx->error_message(), 'Approved');
540 ok($tx->authorization(), '/\d{6}/');
541 ok($tx->server_response->{UMavsResultCode}, "GGG");
542 ok($tx->server_response->{UMresult}, "A");
543 ok($tx->server_response->{UMcvv2Result}, "Match");
544 ok($tx->server_response->{UMversion}, "2.9");
545 ok($tx->server_response->{UMavsResult}, "International Address: Match & Postal: Match");
546 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
547 ok($tx->server_response->{UMerrorcode}, "00000");
548 ok($tx->server_response->{UMbatch}, qr/^\d+/);
549 ok($tx->server_response->{UMvpasResultCode}, "");
550 ok($tx->server_response->{UMcvv2ResultCode}, "M");
551
552 # international address Not compat & match, zip 
553 ok(
554     $tx->content(
555         type           => 'CC',
556         %auth,
557         action         => 'Normal Authorization',
558         description    => 'Business::OnlinePayment test',
559         amount         => '49.95',
560         invoice_number => '100100',
561         name           => 'Tofu Beast',
562         card_number    => '4000101411112228',
563         expiration     => expiration_date(),
564         address        => '1234 Bean Curd Lane, San Francisco',
565         zip            => '94102',
566         cvv2           => '102',
567     )
568 );
569 ok($tx->submit());
570 ok($tx->is_success());
571 ok($tx->error_message(), 'Approved');
572 ok($tx->authorization(), '/\d{6}/');
573 ok($tx->server_response->{UMavsResultCode}, "YGG");
574 ok($tx->server_response->{UMresult}, "A");
575 ok($tx->server_response->{UMcvv2Result}, "Match");
576 ok($tx->server_response->{UMversion}, "2.9");
577 ok($tx->server_response->{UMavsResult}, "International Address: No Compatible & Postal: Match");
578 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
579 ok($tx->server_response->{UMerrorcode}, "00000");
580 ok($tx->server_response->{UMbatch}, qr/^\d+/);
581 ok($tx->server_response->{UMvpasResultCode}, "");
582 ok($tx->server_response->{UMcvv2ResultCode}, "M");
583
584 # full match, avs & match, zip 
585 ok(
586     $tx->content(
587         type           => 'CC',
588         %auth,
589         action         => 'Normal Authorization',
590         description    => 'Business::OnlinePayment test',
591         amount         => '49.95',
592         invoice_number => '100100',
593         name           => 'Tofu Beast',
594         card_number    => '4000200011112222',
595         expiration     => expiration_date(),
596         address        => '1234 Bean Curd Lane, San Francisco',
597         zip            => '94102',
598         cvv2           => '102',
599     )
600 );
601 ok($tx->submit());
602 ok($tx->is_success());
603 ok($tx->error_message(), 'Approved');
604 ok($tx->authorization(), '/\d{6}/');
605 ok($tx->server_response->{UMavsResultCode}, "YYY");
606 ok($tx->server_response->{UMresult}, "A");
607 ok($tx->server_response->{UMcvv2Result}, "Match");
608 ok($tx->server_response->{UMversion}, "2.9");
609 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
610 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
611 ok($tx->server_response->{UMerrorcode}, "00000");
612 ok($tx->server_response->{UMbatch}, qr/^\d+/);
613 ok($tx->server_response->{UMvpasResultCode}, "");
614 ok($tx->server_response->{UMcvv2ResultCode}, "M");
615
616 # match avs & no match cvv2
617 ok(
618     $tx->content(
619         type           => 'CC',
620         %auth,
621         action         => 'Normal Authorization',
622         description    => 'Business::OnlinePayment test',
623         amount         => '49.95',
624         invoice_number => '100100',
625         name           => 'Tofu Beast',
626         card_number    => '4000200111112221',
627         expiration     => expiration_date(),
628         address        => '1234 Bean Curd Lane, San Francisco',
629         zip            => '94102',
630         cvv2           => '102',
631     )
632 );
633 ok($tx->submit());
634 ok($tx->is_success());
635 ok($tx->error_message(), 'Approved');
636 ok($tx->authorization(), '/\d{6}/');
637 ok($tx->server_response->{UMavsResultCode}, "YYY");
638 ok($tx->server_response->{UMresult}, "A");
639 ok($tx->server_response->{UMcvv2Result}, "No Match");
640 ok($tx->server_response->{UMversion}, "2.9");
641 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
642 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
643 ok($tx->server_response->{UMerrorcode}, "00000");
644 ok($tx->server_response->{UMbatch}, qr/^\d+/);
645 ok($tx->server_response->{UMvpasResultCode}, "");
646 ok($tx->server_response->{UMcvv2ResultCode}, "N");
647
648 # match avs & not processed cvv2
649 ok(
650     $tx->content(
651         type           => 'CC',
652         %auth,
653         action         => 'Normal Authorization',
654         description    => 'Business::OnlinePayment test',
655         amount         => '49.95',
656         invoice_number => '100100',
657         name           => 'Tofu Beast',
658         card_number    => '4000200211112220',
659         expiration     => expiration_date(),
660         address        => '1234 Bean Curd Lane, San Francisco',
661         zip            => '94102',
662         cvv2           => '102',
663     )
664 );
665 ok($tx->submit());
666 ok($tx->is_success());
667 ok($tx->error_message(), 'Approved');
668 ok($tx->authorization(), '/\d{6}/');
669 ok($tx->server_response->{UMavsResultCode}, "YYY");
670 ok($tx->server_response->{UMresult}, "A");
671 ok($tx->server_response->{UMcvv2Result}, "Not Processed");
672 ok($tx->server_response->{UMversion}, "2.9");
673 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
674 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
675 ok($tx->server_response->{UMerrorcode}, "00000");
676 ok($tx->server_response->{UMbatch}, qr/^\d+/);
677 ok($tx->server_response->{UMvpasResultCode}, "");
678 ok($tx->server_response->{UMcvv2ResultCode}, "P");
679
680 # match avs & fault in cvv2 database
681 ok(
682     $tx->content(
683         type           => 'CC',
684         %auth,
685         action         => 'Normal Authorization',
686         description    => 'Business::OnlinePayment test',
687         amount         => '49.95',
688         invoice_number => '100100',
689         name           => 'Tofu Beast',
690         card_number    => '4000200311112229',
691         expiration     => expiration_date(),
692         address        => '1234 Bean Curd Lane, San Francisco',
693         zip            => '94102',
694         cvv2           => '102',
695     )
696 );
697 ok($tx->submit());
698 ok($tx->is_success(),0);
699 ok($tx->error_message(), 'Card Declined (00)');
700 ok($tx->authorization(), '/\d{6}/');
701 ok($tx->server_response->{UMavsResultCode}, "YYY");
702 ok($tx->server_response->{UMresult}, "D");
703 ok($tx->server_response->{UMcvv2Result}, "Should be on card but not so indicated");
704 ok($tx->server_response->{UMversion}, "2.9");
705 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
706 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
707 ok($tx->server_response->{UMerrorcode}, "10127");
708 ok($tx->server_response->{UMbatch}, qr/^\d+/);
709 ok($tx->server_response->{UMvpasResultCode}, "");
710 ok($tx->server_response->{UMcvv2ResultCode}, "S");
711
712 # match avs & issuer not certified for cvv2
713 ok(
714     $tx->content(
715         type           => 'CC',
716         %auth,
717         action         => 'Normal Authorization',
718         description    => 'Business::OnlinePayment test',
719         amount         => '49.95',
720         invoice_number => '100100',
721         name           => 'Tofu Beast',
722         card_number    => '4000200411112228',
723         expiration     => expiration_date(),
724         address        => '1234 Bean Curd Lane, San Francisco',
725         zip            => '94102',
726         cvv2           => '102',
727     )
728 );
729 ok($tx->submit());
730 ok($tx->is_success());
731 ok($tx->error_message(), 'Approved');
732 ok($tx->authorization(), '/\d{6}/');
733 ok($tx->server_response->{UMavsResultCode}, "YYY");
734 ok($tx->server_response->{UMresult}, "A");
735 ok($tx->server_response->{UMcvv2Result}, "Issuer Not Certified");
736 ok($tx->server_response->{UMversion}, "2.9");
737 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
738 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
739 ok($tx->server_response->{UMerrorcode}, "00000");
740 ok($tx->server_response->{UMbatch}, qr/^\d+/);
741 ok($tx->server_response->{UMvpasResultCode}, "");
742 ok($tx->server_response->{UMcvv2ResultCode}, "U");
743
744 # match avs & no response for cvv2
745 ok(
746     $tx->content(
747         type           => 'CC',
748         %auth,
749         action         => 'Normal Authorization',
750         description    => 'Business::OnlinePayment test',
751         amount         => '49.95',
752         invoice_number => '100100',
753         name           => 'Tofu Beast',
754         card_number    => '4000200511112227',
755         expiration     => expiration_date(),
756         address        => '1234 Bean Curd Lane, San Francisco',
757         zip            => '94102',
758         cvv2           => '102',
759     )
760 );
761 ok($tx->submit());
762 ok($tx->is_success());
763 ok($tx->error_message(), 'Approved');
764 ok($tx->authorization(), '/\d{6}/');
765 ok($tx->server_response->{UMavsResultCode}, "YYY");
766 ok($tx->server_response->{UMresult}, "A");
767 ok($tx->server_response->{UMcvv2Result}, "No response from association");
768 ok($tx->server_response->{UMversion}, "2.9");
769 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
770 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
771 ok($tx->server_response->{UMerrorcode}, "00000");
772 ok($tx->server_response->{UMbatch}, qr/^\d+/);
773 ok($tx->server_response->{UMvpasResultCode}, "");
774 ok($tx->server_response->{UMcvv2ResultCode}, "X");
775
776 # hard decline
777 ok(
778     $tx->content(
779         type           => 'CC',
780         %auth,
781         action         => 'Normal Authorization',
782         description    => 'Business::OnlinePayment test',
783         amount         => '49.95',
784         invoice_number => '100100',
785         name           => 'Tofu Beast',
786         card_number    => '4000300011112220',
787         expiration     => expiration_date(),
788         address        => '1234 Bean Curd Lane, San Francisco',
789         zip            => '94102',
790         cvv2           => '102',
791     )
792 );
793 ok($tx->submit());
794 ok($tx->is_success(),0);
795 ok($tx->error_message(), 'Card Declined (00)');
796 ok($tx->authorization(), '/\d{6}/');
797 ok($tx->server_response->{UMavsResultCode}, "YYY");
798 ok($tx->server_response->{UMresult}, "D");
799 ok($tx->server_response->{UMcvv2Result}, "No Match"); #"Not Processed");
800 ok($tx->server_response->{UMversion}, "2.9");
801 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
802 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
803 ok($tx->server_response->{UMerrorcode}, "10127");
804 ok($tx->server_response->{UMbatch}, qr/^\d+/);
805 ok($tx->server_response->{UMvpasResultCode}, "");
806 ok($tx->server_response->{UMcvv2ResultCode}, "N");
807
808 # referral
809 ok(
810     $tx->content(
811         type           => 'CC',
812         %auth,
813         action         => 'Normal Authorization',
814         description    => 'Business::OnlinePayment test',
815         amount         => '49.95',
816         invoice_number => '100100',
817         name           => 'Tofu Beast',
818         card_number    => '4000300111112229',
819         expiration     => expiration_date(),
820         address        => '1234 Bean Curd Lane, San Francisco',
821         zip            => '94102',
822         cvv2           => '102',
823     )
824 );
825 ok($tx->submit());
826 ok($tx->is_success(),0);
827 ok($tx->error_message(), 'Transaction Requires Voice Authentication. Please Call-In.');
828 ok($tx->authorization(), '/\d{6}/');
829 ok($tx->server_response->{UMavsResultCode}, "YYY");
830 ok($tx->server_response->{UMresult}, "E");
831 ok($tx->server_response->{UMcvv2Result}, "No Match"); #"Not Processed");
832 ok($tx->server_response->{UMversion}, "2.9");
833 ok($tx->server_response->{UMavsResult}, "Address: Match & 5 Digit Zip: Match");
834 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
835 ok($tx->server_response->{UMerrorcode}, "00043");
836 ok($tx->server_response->{UMbatch}, qr/^\d+/);
837 ok($tx->server_response->{UMvpasResultCode}, "");
838 ok($tx->server_response->{UMcvv2ResultCode}, "N");
839
840 # good check
841 ok(
842     $tx->content(
843         type           => 'ECHECK',
844         %auth,
845         action         => 'Normal Authorization',
846         description    => 'Business::OnlinePayment test',
847         amount         => '49.95',
848         invoice_number => '100100',
849         name           => 'Tofu Beast',
850         routing_code   => '400020001',
851         account_number => '1112222',
852         customer_ssn   => '999999999',
853         address        => '1234 Bean Curd Lane, San Francisco',
854     )
855 );
856 ok($tx->submit());
857 ok($tx->is_success());
858 ok($tx->error_message(), ''); #'Approved');
859 ok($tx->authorization(), '/^\w{6}/'); #\d{6}/');
860 ok($tx->server_response->{UMavsResultCode}, "");
861 ok($tx->server_response->{UMresult}, "A"); #good check
862 ok($tx->server_response->{UMcvv2Result}, "No CVV2/CVC data available for transaction.");
863 ok($tx->server_response->{UMversion}, "2.9");
864 ok($tx->server_response->{UMavsResult}, "No AVS response (Typically no AVS data sent or swiped transaction)"); #"n/a");
865 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
866 ok($tx->server_response->{UMerrorcode}, "00000");
867 ok($tx->server_response->{UMvpasResultCode}, "");
868 ok($tx->server_response->{UMcvv2ResultCode}, "");
869
870
871 # bad check
872 ok(
873     $tx->content(
874         type           => 'ECHECK',
875         %auth,
876         action         => 'Normal Authorization',
877         description    => 'Business::OnlinePayment test',
878         amount         => '5.99', #5.99         Decline 
879         invoice_number => '100100',
880         name           => 'Tofu Beast',
881         routing_code   => '400020001',
882         account_number => '1112222',
883         customer_ssn   => '999999999',
884         address        => '1234 Bean Curd Lane, San Francisco',
885     )
886 );
887 ok($tx->submit());
888 ok($tx->is_success(),0); #393
889 ok($tx->error_message(), 'VC: Returned check for this account'); 
890 ok($tx->authorization(), '/^\w{6}/'); #\d{6}/');
891 ok($tx->server_response->{UMavsResultCode}, "");
892 ok($tx->server_response->{UMresult}, "D"); #bad check
893 ok($tx->server_response->{UMcvv2Result}, "No CVV2/CVC data available for transaction.");
894 ok($tx->server_response->{UMversion}, "2.9");
895 ok($tx->server_response->{UMavsResult}, "No AVS response (Typically no AVS data sent or swiped transaction)"); #"n/a");
896 ok($tx->server_response->{UMrefNum}, qr/^\d+/);
897 ok($tx->server_response->{UMerrorcode}, "00000");
898 ok($tx->server_response->{UMvpasResultCode}, "");
899 ok($tx->server_response->{UMcvv2ResultCode}, "");
900