diff options
author | Mark Wells <mark@freeside.biz> | 2013-08-15 10:57:58 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2013-08-15 17:18:04 -0700 |
commit | 39c50bd135813d015fc2c0a3e6d3e9b57f3d7a96 (patch) | |
tree | 69de954987dc956139942174f0db203216281d08 | |
parent | 53ee797fc1e02879e5f2f9631487f5ac565e8277 (diff) |
failure_status support; better handling of error messages
-rw-r--r-- | Paymentech.pm | 36 |
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; } |