From ca6723c5386d52f267ed3d84d58ae514e3adb683 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 24 Aug 2016 17:53:40 -0700 Subject: [PATCH] but keep failed verification payments linked to their customers, #57135 --- FS/FS/cust_main/Billing_Realtime.pm | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm index 3b7eea1f4..295136032 100644 --- a/FS/FS/cust_main/Billing_Realtime.pm +++ b/FS/FS/cust_main/Billing_Realtime.pm @@ -1870,10 +1870,19 @@ sub realtime_verify_bop { if defined($options{payunique}) && length($options{payunique}); IMMEDIATE: { - # open a separate handle for creating/updating the cust_pay_pending record + # open a separate handle for creating/updating the cust_pay_pending + # record local $FS::UID::dbh = myconnect(); local $FS::UID::AutoCommit = 1; + # if this is an existing customer (and we can tell now because + # this is a fresh transaction), it's safe to assign their custnum + # to the cust_pay_pending record, and then the verification attempt + # will remain linked to them even if it fails. + if ( FS::cust_main->by_key($self->custnum) ) { + $cust_pay_pending->set('custnum', $self->custnum); + } + warn "inserting cust_pay_pending record for customer ". $self->custnum. "\n" if $DEBUG > 1; @@ -2100,12 +2109,14 @@ sub realtime_verify_bop { # the cust_main) ### - $cust_pay_pending->set('custnum', $self->custnum); - my $set_custnum_err = $cust_pay_pending->replace; - if ($set_custnum_err) { - $log->error($set_custnum_err); - $error ||= $set_custnum_err; - # but if there was a real verification error also, return that one + if (!$cust_pay_pending->custnum) { + $cust_pay_pending->set('custnum', $self->custnum); + my $set_custnum_err = $cust_pay_pending->replace; + if ($set_custnum_err) { + $log->error($set_custnum_err); + $error ||= $set_custnum_err; + # but if there was a real verification error also, return that one + } } ### -- 2.11.0