diff options
Diffstat (limited to 'eSelectPlus.pm')
-rw-r--r-- | eSelectPlus.pm | 92 |
1 files changed, 80 insertions, 12 deletions
diff --git a/eSelectPlus.pm b/eSelectPlus.pm index ebe0203..b118080 100644 --- a/eSelectPlus.pm +++ b/eSelectPlus.pm @@ -8,7 +8,7 @@ use Business::OnlinePayment::HTTPS 0.03; use vars qw($VERSION $DEBUG @ISA); @ISA = qw(Business::OnlinePayment::HTTPS); -$VERSION = '0.07'; +$VERSION = '0.08_01'; $DEBUG = 0; sub set_defaults { @@ -66,30 +66,30 @@ sub submit { # => 'transaction_type', #login => 'store_id', #password => 'api_token', + #authorization => - #customer_ip => #name => #first_name => #last_name => #company => - #address => + #address => 'avs_street_number'/'avs_street_name' handled below #city => #state => - #zip => + zip => 'avs_zipcode', #country => - phone => + phone => 'avs_custphone', #fax => - email => + email => 'avs_email', + customer_ip => 'avs_custip', + card_number => 'pan', - #expiration => - # => 'expdate', + #expiration => 'expdate', #handled below + cvv2 => 'cvd_value', 'amount' => 'amount', customer_id => 'cust_id', order_number => 'order_id', # must be unique number - authorization => 'txn_number' # reference to previous trans - - #cvv2 => + authorization => 'txn_number', # reference to previous trans ); my $action = $self->{_content}{'action'}; @@ -122,6 +122,13 @@ sub submit { $month = '0'. $month if $month =~ /^\d$/; $self->{_content}{expdate} = $year.$month; + #CVD Indicator + #0 = CVD value is deliberately bypassed or is not provided by the merchant + #1 = CVD value is present. + #2 = CVD value is on the card, but is illegible. + #9 = Cardholder states that the card has no CVD imprint. + $self->{_content}{cvd_indicator} = $self->{_content}{cvd_value} ? 1 : 0; + $self->generate_order_id; $self->{_content}{order_id} .= '-'. ($invoice_number || 0); @@ -143,6 +150,20 @@ sub submit { } + if ( $self->{_content}{address} ) { + my $number = ''; + my $name = $self->{_content}{address}; + if ( $name =~ s/^\s*(\d+)\w\s+// ) { + $number = $1; + } + $name = substr( $name, 0, 19 - length($number) ); + $self->{_content}{avs_street_number} = $number; + $self->{_content}{avs_street_name} = $name; + } + + $self->{_content}{avs_zipcode} =~ s/\W//g + if defined $self->{_content}{avs_zipcode}; + # E-Commerce Indicator (see eSelectPlus docs) $self->{_content}{'crypt_type'} ||= 7; @@ -159,7 +180,25 @@ sub submit { '<store_id>'. $self->{_content}{'login'}. '</store_id>'. '<api_token>'. $self->{_content}{'password'}. '</api_token>'. "<$action>". - join('', map "<$_>$fields{$_}</$_>", keys %fields ). + join('', map "<$_>$fields{$_}</$_>", keys %fields ); + + if ( $action =~ /^(purchase|preauth|ind_refund)$/ ) { + tie my %avs_fields, 'Tie::IxHash', $self->get_fields( $self->avs_fields ); + $post_data .= + '<avs_info>'. + join('', map "<$_>$avs_fields{$_}</$_>", keys %avs_fields ). + '</avs_info>' + if grep $_, values %avs_fields; + + tie my %cvd_fields, 'Tie::IxHash', $self->get_fields( $self->cvd_fields ); + $post_data .= + '<cvd_info>'. + join('', map "<$_>$cvd_fields{$_}</$_>", keys %cvd_fields ). + '</cvd_info>' + if grep $_, values %cvd_fields; + } + + $post_data .= "</$action>". '</request>'; @@ -270,6 +309,35 @@ sub fields { ); } +sub avs_fields { + my $self = shift; + + #order is important to this processor + qw( + avs_street_number + avs_street_name + avs_zipcode + avs_email + avs_hostname + avs_browser + avs_shiptocountry + avs_shipmethod + avs_merchprodsku + avs_custip + avs_custphone + ); +} + +sub cvd_fields { + my $self = shift; + + #order is important to this processor + qw( + cvd_indicator + cvd_value + ); +} + sub GetXMLProp { my( $self, $raw, $prop ) = @_; local $^W=0; |