summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2014-02-15 12:35:19 -0800
committerIvan Kohler <ivan@freeside.biz>2014-02-15 12:35:19 -0800
commit72955bfaad9e0d8fe2000e370b37696913e4da58 (patch)
treec3bbacca1221acb45d1c473eaed2a8e24a09e154
parent89cae7353a943921f30513529e748e1fbb7628f0 (diff)
parent1207cdca57ea1db84ed723a5a207c0b545fde354 (diff)
Merge branch 'master' of git.freeside.biz:/home/git/Business-OnlinePayment-PaymenTech
-rw-r--r--lib/Business/OnlinePayment/PaymenTech.pm27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/Business/OnlinePayment/PaymenTech.pm b/lib/Business/OnlinePayment/PaymenTech.pm
index 5363a8d..14131e8 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;
@@ -303,6 +329,7 @@ sub submit {
)
{
+ $self->failure_status( $failure_status{ $r->{RespCode} } || 'decline' );
$self->is_success(0);
$self->error_message( "Transaction error: '".
($r->{'ProcStatusMsg'} || $r->{'StatusMsg'}) . "'"