package Business::OnlineThirdPartyPayment::eWayShared; use strict; use Business::OnlineThirdPartyPayment 3; use vars qw($VERSION @ISA $DEBUG); @ISA = qw(Business::OnlineThirdPartyPayment); $VERSION = '0.01'; $DEBUG = 0; sub set_defaults { my $self = shift; $self->server('www.eway.com.au') unless $self->server; $self->port('443') unless $self->port; $self->path('/gateway/payment.asp') unless $self->path; $self->build_subs(qw(authorization order_number result_code error_message)); } sub use_3dsecure { my $self = shift; $self->{'use_3dsecure'} = shift if ( @_ ); $self->path('/gateway_3d/payment.asp') if $self->{'use_3dsecure'}; return $self->{'use_3dsecure'}; } sub reference { # Situation: We've been POSTed back from the gateway's web site. The # POST data is in the argument. We need to set the state of the object # and then return the reference number. my ($self, $data) = @_; my $status = $data->{'ewayTrxnStatus'}; $self->order_number($data->{'ewayTrxnReference'}); if ( lc($status) eq 'true' ) { $self->is_success(1); $self->authorization($data->{'eWAYAuthCode'}); # not spelled like this in the spec } else { $self->is_success(0); $self->result_code($data->{'eWAYresponsecode'}); $self->error_message($data->{'eWAYresponseText'}); } return $data->{'ewayTrxnNumber'}; } sub submit { # One of two situations: # "authorization only": We haven't sent anything yet and are just # creating a pending transaction locally. Set popup_url and remap # transaction fields into collectitems. # OR # "post authorization: We've already called reference() with the # callback data. my($self) = @_; my %content = $self->content; my $action = lc($content{'action'}); die 'Third Party Payment supports "Authorization Only" and '. '"Post Authorization" transactions' if !($action eq 'authorization only' || $action eq 'post authorization'); die 'eWay only supports credit card transactions' if $self->transaction_type() ne 'CC'; my @required = qw( amount reference ); $self->required_fields(@required); if ( $action eq 'authorization only' ) { $self->is_success(1); my $url = "https://". $self->server(). ($self->port != 443 ? ':'. $self->port() : ''). $self->path(); $self->popup_url( $url ); my %fields = ( 'login' => 'ewayCustomerID', 'amount' => 'ewayTotalAmount', 'first_name' => 'ewayCustomerFirstName', 'last_name' => 'ewayCustomerLastName', 'email' => 'ewayCustomerEmail', 'address' => 'ewayCustomerAddress', 'zip' => 'ewayCustomerPostcode', 'description' => 'ewayCustomerInvoiceDescription', 'invoice_number' => 'ewayCustomerInvoiceRef', 'reference' => 'ewayTrxnNumber', 'callback_url' => 'eWAYURL', ); $self->required_fields(qw(login amount first_name last_name)); $self->remap_fields(%fields); my %content = $self->content; $content{'ewayTotalAmount'} *= 100; $self->collectitems([ map { $_ => $content{$_} } values(%fields) ]); $self->is_success(1); return; } elsif ( $action eq 'post authorization' ) { return; # everything has been set up already } } 1; __END__ =head1 NAME Business::OnlineThirdPartyPayment::eWayShared - eWay backend for Business::OnlineThirdPartyPayment =head1 DESCRIPTION For detailed information see L. Call "$transaction->use_3dsecure(1)" (or pass "'use_3dsecure' => 1" to I) to enable the 3D-Secure gateway. =head1 NOTE =head1 COMPATIBILITY eWay Shared Payments and 3D-Secure API, as of December 2010. =head1 AUTHOR Mark Wells Based on Business::OnlineThirdPartyPayment::Interswitchng by Jeff Finucane =head1 SEE ALSO perl(1). L. =cut