summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-08-15 12:51:44 -0700
committerMark Wells <mark@freeside.biz>2013-08-15 18:28:12 -0700
commit1207cdca57ea1db84ed723a5a207c0b545fde354 (patch)
tree34df3295807343ec2304203a6f297c26cc2fd197
parent31753c35b06e7e95ea19b5c00e3d6e0ac8fc47af (diff)
failure_status support
-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 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'}) . "'"