From 5542044a7fae3e5a3201985b9c6a3ff358dff294 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 22 Oct 2009 04:53:53 +0000 Subject: [PATCH] Initial release --- lib/Business/OnlinePayment/Jety.pm | 217 +++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 lib/Business/OnlinePayment/Jety.pm diff --git a/lib/Business/OnlinePayment/Jety.pm b/lib/Business/OnlinePayment/Jety.pm new file mode 100644 index 0000000..c154d21 --- /dev/null +++ b/lib/Business/OnlinePayment/Jety.pm @@ -0,0 +1,217 @@ +package Business::OnlinePayment::Jety; + +use strict; +use Carp; +use Business::OnlinePayment 3; +use Business::OnlinePayment::HTTPS; +use vars qw($VERSION @ISA $me $DEBUG); + +use Date::Format; +use Tie::IxHash; + +@ISA = qw(Business::OnlinePayment::HTTPS); +$VERSION = '0.01'; +$me = 'Business::OnlinePayment::Jety'; + +$DEBUG = 1; + +my @fields = (qw( + username + password + function + firstname + lastname + address1 + address2 + city + state + zip + email + phone + programdesc + ref + bankname + accountaba + accountdda + amount +)); + +my %map = ( + login => 'username', + first_name => 'firstname', + last_name => 'lastname', + address => 'address1', + bank_name => 'bankname', + account_number => 'accountdda', + routing_code => 'accountaba', +); + + +sub set_defaults { + my $self = shift; + $self->server('api.cardservicesportal.com'); + $self->port(443); + $self->path('/servlet/drafts.echeck'); + return; +} + +sub map_fields { + my $self = shift; + my $content = $self->{_content}; + + $self->remap_fields(%map); + + die "Jety API only supports ECHECK payments.\n" + if(lc($content->{type}) ne 'echeck'); + die "Jety interface only supports Normal Authorization.\n" + if(lc($content->{action}) ne 'normal authorization'); + + $content->{'function'} = 'ach'; + $content->{'programdesc'} = '415-462-1624 Business::OnlinePayment::Jety'; + $content->{'ref'} = time2str('%Y%m%d',time).'-'.int(rand(1000000)); + return; +} + +sub submit { + my $self = shift; + $Business::OnlinePayment::HTTPS::DEBUG = $DEBUG; + $DB::single = $DEBUG; + + $self->required_fields(qw( + type + action + first_name + last_name + address + city + state + zip + email + phone + account_number + routing_code + amount + ) ); + $self->map_fields; + tie my %request, 'Tie::IxHash', ( + map { $_, $self->{_content}->{$_} } @fields + ); + + $DB::single = $DEBUG; + if($self->test_transaction()) { + print "https://".$self->server.$self->path."\n"; + print "$_\t".$request{$_}."\n" foreach keys(%request); + $self->error_message('test mode not supported'); + $self->is_success(0); + return; + } + my ($reply, $response, %reply_headers) = $self->https_post(\%request); + + if(not $response =~ /^200/) { + croak "HTTPS error: '$response'"; + } + + # string looks like this: + # P1=1234&P2=General Status&P3=Specific Status + # P3 is not always there, though. + if($reply =~ /^P1=(\d+)&P2=([\w ]*)(&P3=(\S+))?/) { + if($1 == 0) { + $self->is_success(1); + $self->authorization($4); + } + else { + $self->is_success(0); + $self->error_message($2.($4 ? "($4)" : '')); + } + } + else { + croak "Malformed server response: '$reply'"; + } + + return; +} + +1; +__END__ + +=head1 NAME + +Business::OnlinePayment::Jety - Jety Payments ACH backend for Business::OnlinePayment + +=head1 SYNOPSIS + + use Business::OnlinePayment; + + #### + # Electronic check authorization. We only support + # 'Normal Authorization'. + #### + + my $tx = new Business::OnlinePayment("Jety"); + $tx->content( + type => 'ECHECK', + login => 'testdrive', + password => 'testpass', + action => 'Normal Authorization', + description => 'Business::OnlinePayment test', + amount => '49.95', + invoice_number => '100100', + first_name => 'Jason', + last_name => 'Kohles', + address => '123 Anystreet', + city => 'Anywhere', + state => 'UT', + zip => '84058', + account_type => 'personal checking', + account_number => '1000468551234', + routing_code => '707010024', + check_number => '1001', # optional + ); + $tx->submit(); + + if($tx->is_success()) { + print "Check processed successfully: ".$tx->authorization."\n"; + } else { + print "Check was rejected: ".$tx->error_message."\n"; + } + +=head1 SUPPORTED TRANSACTION TYPES + +=head2 ECHECK + +Content required: type, login, password, action, amount, first_name, last_name, account_number, routing_code. + +=head1 DESCRIPTION + +For detailed information see L. + +=head1 METHODS AND FUNCTIONS + +See L for the complete list. The following methods either override the methods in L or provide additional functions. + +=head2 result_code + +Returns the four-digit result code. + +=head2 error_message + +Returns a useful error message. + +=head1 Handling of content(%content) data: + +=head2 action + +The following actions are valid: + + normal authorization + +=head1 AUTHOR + +Mark Wells + +=head1 SEE ALSO + +perl(1). L. + +=cut + -- 2.11.0