summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-05-28 18:42:30 -0500
committerJonathan Prykop <jonathan@freeside.biz>2016-05-28 19:03:22 -0500
commit39d548ee2abd261b399a94f3958ec1cf0cbbe557 (patch)
treeb9061b339ecbcb1fb569b64170df8e8d687d04de
parent246fe26e15bfcb9783f4e69ac03fd12d7528dbeb (diff)
RT#57135: Credit card validation: take action based on AVS response [warnings in system log, v3 merge]
-rw-r--r--FS/FS/cust_main/Billing_Realtime.pm17
-rw-r--r--FS/FS/log_context.pm1
2 files changed, 15 insertions, 3 deletions
diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm
index 419045af0..f5b96f2ee 100644
--- a/FS/FS/cust_main/Billing_Realtime.pm
+++ b/FS/FS/cust_main/Billing_Realtime.pm
@@ -1924,6 +1924,8 @@ sub realtime_verify_bop {
}
}
+ my $log = FS::Log->new('FS::cust_main::Billing_Realtime::realtime_verify_bop');
+
if ( $transaction->is_success() ) {
$cust_pay_pending->status('authorized');
@@ -1968,6 +1970,7 @@ sub realtime_verify_bop {
my $e = "Authorization successful but reversal failed, custnum #".
$self->custnum. ': '. $reverse->result_code.
": ". $reverse->error_message;
+ $log->warning($e);
warn $e;
return $e;
@@ -2006,6 +2009,7 @@ sub realtime_verify_bop {
# Neither address nor postal code matches N N N N
if (my $avscode = uc($transaction->avs_code)) {
+
# map codes to accept/warn/reject
my $avs = {
'American Express card' => {
@@ -2059,13 +2063,18 @@ sub realtime_verify_bop {
my $cardtype = cardtype($content{card_number});
if ($avs->{$cardtype}) {
my $avsact = $avs->{$cardtype}->{$avscode};
+ my $warning = '';
if ($avsact eq 'r') {
return "AVS code verification failed, cardtype $cardtype, code $avscode";
} elsif ($avsact eq 'w') {
- warn "AVS code verification did not occur, cardtype $cardtype, code $avscode";
+ $warning = "AVS did not occur, cardtype $cardtype, code $avscode";
} elsif (!$avsact) {
- warn "AVS code verification did not occur, unknown avscode, cardtype $cardtype, code $avscode";
+ $warning = "AVS code unknown, cardtype $cardtype, code $avscode";
} # else $avsact eq 'a'
+ if ($warning) {
+ $log->warning($warning);
+ warn $warning;
+ }
} # else $cardtype avs handling not implemented
} # else !$transaction->avs_code
@@ -2092,7 +2101,9 @@ sub realtime_verify_bop {
$self->payinfo($transaction->card_token);
my $error = $self->replace;
if ( $error ) {
- warn "WARNING: error storing token: $error, but proceeding anyway\n";
+ my $warning = "WARNING: error storing token: $error, but proceeding anyway\n";
+ $log->warning($warning);
+ warn $warning;
}
}
diff --git a/FS/FS/log_context.pm b/FS/FS/log_context.pm
index 718b4d54a..ddea77119 100644
--- a/FS/FS/log_context.pm
+++ b/FS/FS/log_context.pm
@@ -9,6 +9,7 @@ my @contexts = ( qw(
bill_and_collect
FS::cust_main::Billing::bill_and_collect
FS::cust_main::Billing::bill
+ FS::cust_main::Billing_Realtime::realtime_verify_bop
FS::Misc::Geo::standardize_uscensus
Cron::bill
Cron::upload