summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-08-15 10:57:58 -0700
committerMark Wells <mark@freeside.biz>2013-08-15 17:18:04 -0700
commit39c50bd135813d015fc2c0a3e6d3e9b57f3d7a96 (patch)
tree69de954987dc956139942174f0db203216281d08
parent53ee797fc1e02879e5f2f9631487f5ac565e8277 (diff)
failure_status support; better handling of error messages
-rw-r--r--Paymentech.pm36
1 files changed, 35 insertions, 1 deletions
diff --git a/Paymentech.pm b/Paymentech.pm
index e505c0f..19277cc 100644
--- a/Paymentech.pm
+++ b/Paymentech.pm
@@ -240,13 +240,47 @@ sub parse_item {
second => $sec,
);
+ my %failure_status = (
+ # API version 2.6, April 2013
+ '00' => undef, # Approved
+ '04' => 'pickup',
+ '33' => 'expired',
+ '41' => 'stolen',
+ '42' => 'inactive',
+ '43' => 'stolen',
+ '44' => 'inactive',
+ '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
+ ); # all others are "decline"
+
+ my $failure_status = undef;
+ my $error_message;
+
+ if ( $resp->{procStatus} ) {
+ $error_message = $resp->{procStatusMessage};
+ } elsif ( $resp->{respCode} ) {
+ $error_message = $resp->{respCodeMessage};
+ $failure_status = $failure_status{ $resp->{respCode} } || 'decline';
+ } else {
+ $error_message = '';
+ }
+
my $item = Business::BatchPayment->create(Item =>
tid => $resp->{orderID},
process_date => $dt,
authorization => $resp->{authorizationCode},
order_number => $resp->{txRefNum},
approved => ($resp->{approvalStatus} == 1),
- error_message => $resp->{procStatusMessage},
+ error_message => $error_message,
+ failure_status => $failure_status,
);
$item;
}