Initial release
authormark <mark>
Thu, 22 Oct 2009 04:53:53 +0000 (04:53 +0000)
committermark <mark>
Thu, 22 Oct 2009 04:53:53 +0000 (04:53 +0000)
lib/Business/OnlinePayment/Jety.pm [new file with mode: 0644]

diff --git a/lib/Business/OnlinePayment/Jety.pm b/lib/Business/OnlinePayment/Jety.pm
new file mode 100644 (file)
index 0000000..c154d21
--- /dev/null
@@ -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<Business::OnlinePayment>.
+
+=head1 METHODS AND FUNCTIONS
+
+See L<Business::OnlinePayment> for the complete list. The following methods either override the methods in L<Business::OnlinePayment> 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 <mark@freeside.biz>
+
+=head1 SEE ALSO
+
+perl(1). L<Business::OnlinePayment>.
+
+=cut
+