From: ivan Date: Mon, 7 Nov 2005 11:10:08 +0000 (+0000) Subject: - Switch from GET to POST, as per old 1.5 prerelease from Michael X-Git-Tag: Business_OnlinePayment_OpenECHO_0_03~7 X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-OpenECHO.git;a=commitdiff_plain;h=32073e637db2c5c91b726072f891c36ebd8b3d10 - Switch from GET to POST, as per old 1.5 prerelease from Michael Lehmkuhl - 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 --- diff --git a/Changes b/Changes index 314e208..25e8f10 100644 --- a/Changes +++ b/Changes @@ -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 + - 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"; +} diff --git a/t/check.t b/t/check.t index d64d49c..c68c442 100644 --- a/t/check.t +++ b/t/check.t @@ -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',