#!/usr/bin/env perl use strict; use warnings; use Test::More; use lib 't'; require 'TestFixtures.pm'; use Business::OnlinePayment; my $merchant_id = $ENV{BAMBORA_MERCHANT_ID}; my $api_key = $ENV{BAMBORA_API_KEY}; SKIP: { skip 'Missing env vars BAMBORA_MERCHANT_ID and BAMBORA_API_KEY', 32 unless $merchant_id && $api_key; my %content = ( login => $merchant_id, password => $api_key, action => 'Authorization Only', amount => '9.99', owner => 'Freeside Internet Services', name => 'Mitch Jackson', address => '1407 Graymalkin Lane', city => 'Vancouver', state => 'BC', zip => '111 111', country => 'CA', invoice_number => time(), card_number => '4030000010001234', cvv2 => '123', expiration => '1122', phone => '251-300-1300', email => 'mitch@freeside.biz', ); my $tr; ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' ); ok( $tr->content( %content ), 'Set transaction content onto $tr' ); { local $@; eval { $tr->submit }; ok( !$@, "Submit pre-auth (expect approve)" ); } my $response; my %expect = ( amount => '9.99', approved => 1, auth_code => 'TEST', message => 'Approved', message_id => 1, payment_method => 'CC', type => 'PA', ); my @expect = qw( card created order_number risk_score id ); ok( $response = $tr->response_decoded, 'response_decoded' ); for my $k ( keys %expect ) { ok( $response->{$k} eq $expect{$k}, sprintf '$tr->%s == %s', $k, $expect{$k} ); } for my $k ( @expect ) { ok( defined $response->{$k}, sprintf '$r->%s (%s)', $k, $response->{$k} ); } %content = ( %content, action => 'Post Authorization', order_number => $tr->order_number, amount => '8.99', # $1 Less than pre-auth ); my $tr_pa; ok( $tr_pa = Business::OnlinePayment->new('Bambora'), 'Instantiate $tr_pa' ); ok( $tr_pa->content( %content ), 'Set transaction content onto $tr_pa' ); { local $@; eval { $tr_pa->submit }; ok( !$@, "Submit post-auth" ); warn "Error: $@" if $@; } %expect = ( amount => '8.99', approved => '1', message => 'Approved', message_id => '1', type => 'PAC', ); @expect = (qw/ authorizing_merchant_id card created order_number id /); my $response_pa; ok( $response_pa = $tr_pa->response_decoded, 'response_decoded' ); for my $k ( keys %expect ) { ok( $response_pa->{$k} eq $expect{$k}, sprintf '$tr->%s == %s', $k, $expect{$k} ); } for my $k ( @expect ) { ok( defined $response_pa->{$k}, sprintf '$r->%s (%s)', $k, $response_pa->{$k} ); } # # Void Transaction # my %content_void = ( action => 'Void', login => $content{login}, password => $content{password}, order_number => $tr_pa->order_number, amount => '8.99', ); my $tr_void; ok( $tr_void = Business::OnlinePayment->new('Bambora'), 'Instantiate $tr_void' ); ok( $tr_void->content( %content_void ), 'Set transaction content onto $tr_void' ); { local $@; eval { $tr_void->submit }; ok( !$@, "Submit void" ); warn "Error: $@" if $@; } %expect = ( amount => '8.99', approved => '1', message => 'Approved', message_id => '1', type => 'R', ); @expect = (qw/ authorizing_merchant_id card created order_number id /); } done_testing;