diff options
-rw-r--r-- | Changes | 12 | ||||
-rw-r--r-- | OpenECHO.pm | 35 | ||||
-rw-r--r-- | t/bad_card.t | 5 | ||||
-rw-r--r-- | t/bad_check.t | 39 | ||||
-rw-r--r-- | t/check.t | 15 | ||||
-rw-r--r-- | t/credit_card.t | 5 | ||||
-rw-r--r-- | t/crypt_bad_card.t | 5 | ||||
-rw-r--r-- | t/crypt_bad_check.t | 43 | ||||
-rw-r--r-- | t/crypt_check.t | 43 | ||||
-rw-r--r-- | t/crypt_credit_card.t | 5 |
10 files changed, 179 insertions, 28 deletions
@@ -1,6 +1,14 @@ 0.03 unreleased - - include final 0.02 changelog - - actually bump the version number this time + - Include final 0.02 changelog + - Actually bump the version number this time + - Switch from GET to POST, as per old 1.5 prerelease from Michael + Lehmkuhl <michael@electricpulp.com> + - Don't check expiration for ECHECK and refunds + - For the unsupported "void" action, return is_success 0 and error + msg suggesting "credit" action, instead of croaking. This way the + "try void first, if it fails, try credit" idiom will work. + - tests: enable check.t and add crypt_check.t and {crypt_}bad_check.t + - update with new test account 0.02 Mon Sep 13 17:14:29 2004 - update test account with new PIN diff --git a/OpenECHO.pm b/OpenECHO.pm index fdf3a56..a9eed3a 100644 --- a/OpenECHO.pm +++ b/OpenECHO.pm @@ -56,10 +56,11 @@ use strict; use Carp;
use Business::OnlinePayment 3;
use Business::OnlinePayment::HTTPS;
-use vars qw($VERSION @ISA);
+use vars qw($VERSION @ISA $DEBUG);
@ISA = qw(Business::OnlinePayment::HTTPS);
$VERSION = '0.03';
+$DEBUG = 0;
sub set_defaults {
my $self = shift;
@@ -96,6 +97,14 @@ sub map_fields { my %content = $self->content();
+ if ( lc($content{'action'}) eq 'void' ) {
+ $self->is_success(0);
+ $self->error_message( 'OpenECHO gateway does not support voids; '.
+ 'try action => "Credit" '
+ );
+ return;
+ }
+
my $avs = $self->require_avs;
$avs = 1 unless defined($avs) && length($avs); #default AVS on unless explicitly turned off
@@ -214,6 +223,8 @@ sub submit { license_num => 'ec_id_number',
license_state => 'ec_id_state',
#license_dob =>
+ payee => 'ec_payee',
+ check_number => 'ec_serial_number',
#recurring_billing => 'cnp_recurring',
);
@@ -224,14 +235,16 @@ sub submit { #XXX counter field shouldn't be just a random integer (but it does need a
#default this way i guess...
$self->{_content}{counter} = int(rand(2**31));
-
- #ccexp_month & ccexp_year
- $self->{_content}{'expiration'} =~ /^(\d+)\D+\d*(\d{2})$/
- or croak "unparsable expiration ". $self->{_content}{expiration};
- my( $month, $year ) = ( $1, $2 );
- $month = '0'. $month if $month =~ /^\d$/;
- $self->{_content}{ccexp_month} = $month;
- $self->{_content}{ccexp_year} = $year;
+
+ if ( $self->transaction_type =~ /^[EA][VS]$/ ) {
+ #ccexp_month & ccexp_year
+ $self->{_content}{'expiration'} =~ /^(\d+)\D+\d*(\d{2})$/
+ or croak "unparsable expiration ". $self->{_content}{expiration};
+ my( $month, $year ) = ( $1, $2 );
+ $month = '0'. $month if $month =~ /^\d$/;
+ $self->{_content}{ccexp_month} = $month;
+ $self->{_content}{ccexp_year} = $year;
+ }
$self->{_content}{cnp_recurring} = 'Y'
if exists($self->{_content}{recurring_billing})
@@ -244,7 +257,9 @@ sub submit { $self->required_fields();
my( $page, $response, %reply_headers) =
- $self->https_get( $self->get_fields( $self->fields ) );
+ $self->https_post( $self->get_fields( $self->fields ) );
+
+ warn "raw echo response: $page" if $DEBUG;
#XXX check $response and die if not 200?
diff --git a/t/bad_card.t b/t/bad_card.t index 3d0913c..760242b 100644 --- a/t/bad_card.t +++ b/t/bad_card.t @@ -10,9 +10,8 @@ use Business::OnlinePayment; my $tx = new Business::OnlinePayment("OpenECHO"); $tx->content( type => 'VISA', - #login => '123>4684752', - login => '1234684752', - password => '54321420', + 'login' => '123>4685706', + 'password' => '09437869', action => 'Normal Authorization', description => 'Business::OnlinePayment visa test', amount => '49.95', diff --git a/t/bad_check.t b/t/bad_check.t new file mode 100644 index 0000000..6b44591 --- /dev/null +++ b/t/bad_check.t @@ -0,0 +1,39 @@ +BEGIN { $| = 1; print "1..1\n"; } + +eval "use Net::SSLeay;"; +if ( $@ ) { + print "ok 1 # Skipped: Net::SSLeay is not installed\n"; exit; +} + +use Business::OnlinePayment; + +# checks are broken it seems +my $ctx = new Business::OnlinePayment("OpenECHO"); +$ctx->content( + type => 'CHECK', + 'login' => '123>4685706', + 'password' => '09437869', + action => 'Normal Authorization', + amount => '49.95', + invoice_number => '100100', + customer_id => 'jsk', + first_name => 'Tofu', + last_name => 'Beast', + account_number => '12345', + routing_code => '026009593', + bank_name => 'First National Test Bank', + phone => '420-420-5454', + payee => 'Tofu Heavy Enterprises, GmbH', + check_number => '420', +); +$ctx->test_transaction(1); # test, dont really charge +$ctx->submit(); + +print $ctx->is_success()."\n"; + +if($ctx->is_success()) { + #warn $ctx->error_message(); + print "not ok 1 (".$ctx->error_message().")\n"; +} else { + print "ok 1\n"; +} @@ -1,6 +1,9 @@ BEGIN { $| = 1; print "1..1\n"; } -print "ok 1 # Skipped: no ACH test yet\n"; exit; +eval "use Net::SSLeay;"; +if ( $@ ) { + print "ok 1 # Skipped: Net::SSLeay is not installed\n"; exit; +} use Business::OnlinePayment; @@ -8,8 +11,8 @@ use Business::OnlinePayment; my $ctx = new Business::OnlinePayment("OpenECHO"); $ctx->content( type => 'CHECK', - login => 'testing', - password => 'testing', + 'login' => '123>4685706', + 'password' => '09437869', action => 'Normal Authorization', amount => '49.95', invoice_number => '100100', @@ -17,8 +20,11 @@ $ctx->content( first_name => 'Tofu', last_name => 'Beast', account_number => '12345', - routing_code => '123456789', + routing_code => '026009593', bank_name => 'First National Test Bank', + phone => '420-420-5454', + payee => 'Tofu Heavy Enterprises, GmbH', + check_number => '420', ); $ctx->test_transaction(1); # test, dont really charge $ctx->submit(); @@ -28,5 +34,6 @@ print $ctx->is_success()."\n"; if($ctx->is_success()) { print "ok 1\n"; } else { + warn $ctx->error_message(); print "not ok 1 (".$ctx->error_message().")\n"; } diff --git a/t/credit_card.t b/t/credit_card.t index 3878374..62b6c8d 100644 --- a/t/credit_card.t +++ b/t/credit_card.t @@ -10,9 +10,8 @@ use Business::OnlinePayment; my $tx = new Business::OnlinePayment("OpenECHO"); $tx->content( type => 'VISA', - #login => '123>4684752', - login => '1234684752', - password => '54321420', + 'login' => '123>4685706', + 'password' => '09437869', action => 'Normal Authorization', description => 'Business::OnlinePayment visa test', amount => '49.95', diff --git a/t/crypt_bad_card.t b/t/crypt_bad_card.t index 9e10fc2..572b187 100644 --- a/t/crypt_bad_card.t +++ b/t/crypt_bad_card.t @@ -14,9 +14,8 @@ use Business::OnlinePayment; my $tx = new Business::OnlinePayment("OpenECHO"); $tx->content( type => 'VISA', - #login => '123>4684752', - login => '1234684752', - password => '54321420', + 'login' => '123>4685706', + 'password' => '09437869', action => 'Normal Authorization', description => 'Business::OnlinePayment visa test', amount => '49.95', diff --git a/t/crypt_bad_check.t b/t/crypt_bad_check.t new file mode 100644 index 0000000..4903b48 --- /dev/null +++ b/t/crypt_bad_check.t @@ -0,0 +1,43 @@ +BEGIN { + $| = 1; print "1..1\n"; + $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1; + $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1; +} + +eval "use Crypt::SSLeay;"; +if ( $@ ) { + print "ok 1 # Skipped: Crypt::SSLeay is not installed\n"; exit; +} + +use Business::OnlinePayment; + +# checks are broken it seems +my $ctx = new Business::OnlinePayment("OpenECHO"); +$ctx->content( + type => 'CHECK', + 'login' => '123>4685706', + 'password' => '09437869', + action => 'Normal Authorization', + amount => '49.95', + invoice_number => '100100', + customer_id => 'jsk', + first_name => 'Tofu', + last_name => 'Beast', + account_number => '12345', + routing_code => '026009593', + bank_name => 'First National Test Bank', + phone => '420-420-5454', + payee => 'Tofu Heavy Enterprises, GmbH', + check_number => '420', +); +$ctx->test_transaction(1); # test, dont really charge +$ctx->submit(); + +print $ctx->is_success()."\n"; + +if($ctx->is_success()) { + #warn $ctx->error_message(); + print "not ok 1 (".$ctx->error_message().")\n"; +} else { + print "ok 1\n"; +} diff --git a/t/crypt_check.t b/t/crypt_check.t new file mode 100644 index 0000000..7d01a85 --- /dev/null +++ b/t/crypt_check.t @@ -0,0 +1,43 @@ +BEGIN { + $| = 1; print "1..1\n"; + $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1; + $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1; +} + +eval "use Crypt::SSLeay;"; +if ( $@ ) { + print "ok 1 # Skipped: Crypt::SSLeay is not installed\n"; exit; +} + +use Business::OnlinePayment; + +# checks are broken it seems +my $ctx = new Business::OnlinePayment("OpenECHO"); +$ctx->content( + type => 'CHECK', + 'login' => '123>4685706', + 'password' => '09437869', + action => 'Normal Authorization', + amount => '49.95', + invoice_number => '100100', + customer_id => 'jsk', + first_name => 'Tofu', + last_name => 'Beast', + account_number => '12345', + routing_code => '026009593', + bank_name => 'First National Test Bank', + phone => '420-420-5454', + payee => 'Tofu Heavy Enterprises, GmbH', + check_number => '420', +); +$ctx->test_transaction(1); # test, dont really charge +$ctx->submit(); + +print $ctx->is_success()."\n"; + +if($ctx->is_success()) { + print "ok 1\n"; +} else { + warn $ctx->error_message(); + print "not ok 1 (".$ctx->error_message().")\n"; +} diff --git a/t/crypt_credit_card.t b/t/crypt_credit_card.t index 8f5c252..6b7c01a 100644 --- a/t/crypt_credit_card.t +++ b/t/crypt_credit_card.t @@ -14,9 +14,8 @@ use Business::OnlinePayment; my $tx = new Business::OnlinePayment("OpenECHO"); $tx->content( type => 'VISA', - #login => '123>4684752', - login => '1234684752', - password => '54321420', + 'login' => '123>4685706', + 'password' => '09437869', action => 'Normal Authorization', description => 'Business::OnlinePayment visa test', amount => '49.95', |