From 1207cdca57ea1db84ed723a5a207c0b545fde354 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 15 Aug 2013 12:51:44 -0700 Subject: [PATCH] failure_status support --- lib/Business/OnlinePayment/PaymenTech.pm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/Business/OnlinePayment/PaymenTech.pm b/lib/Business/OnlinePayment/PaymenTech.pm index 3d060bb..5ae91b7 100644 --- a/lib/Business/OnlinePayment/PaymenTech.pm +++ b/lib/Business/OnlinePayment/PaymenTech.pm @@ -98,6 +98,32 @@ my %currency_code = ( ); my %paymentech_countries = map { $_ => 1 } qw( US CA GB UK ); +my %failure_status = ( + # values of the RespCode element + # in theory RespMsg should be set to a descriptive message, but it looks + # like that's not reliable + # XXX we should have a way to indicate other actions required by the + # processor, such as "honor with identification", "call for instructions", + # etc. + '00' => undef, # Approved + '04' => 'pickup', # Pickup + '33' => 'expired', # Card is Expired + '41' => 'stolen', # Lost/Stolen + '42' => 'inactive', # Account Not Active + '43' => 'stolen', # Lost/Stolen Card + '44' => 'inactive', # Account Not Active + #'45' duplicate transaction, should also have its own status + 'B7' => 'blacklisted', # Fraud + 'B9' => 'blacklisted', # On Negative File + 'BB' => 'stolen', # Possible Compromise + 'BG' => 'blacklisted', # Blocked Account + 'BQ' => 'blacklisted', # Issuer has Flagged Account as Suspected Fraud + 'C4' => 'nsf', # Over Credit Limit + 'D5' => 'blacklisted', # On Negative File + 'D7' => 'nsf', # Insufficient Funds + 'F3' => 'inactive', # Account Closed + 'K6' => 'nsf', # NSF +); sub set_defaults { my $self = shift; @@ -304,6 +330,7 @@ sub submit { ) { + $self->failure_status( $failure_status{ $r->{RespCode} } || 'decline' ); $self->is_success(0); $self->error_message( "Transaction error: '". ($r->{'ProcStatusMsg'} || $r->{'StatusMsg'}) . "'" -- 2.11.0