RT#37632: Credit card validation [v3 fixes]
authorJonathan Prykop <jonathan@freeside.biz>
Tue, 3 May 2016 02:44:40 +0000 (21:44 -0500)
committerJonathan Prykop <jonathan@freeside.biz>
Tue, 3 May 2016 20:18:32 +0000 (15:18 -0500)
FS/FS/cust_main.pm
FS/FS/cust_main/Billing_Realtime.pm

index 6e66646..22b7a16 100644 (file)
@@ -542,6 +542,16 @@ sub insert {
 
   }
 
+  # validate card (needs custnum already set)
+  if ( $self->payby =~ /^(CARD|DCRD)$/
+       && $conf->exists('business-onlinepayment-verification') ) {
+    $error = $self->realtime_verify_bop({ 'method'=>'CC' });
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+
   warn "  setting contacts\n"
     if $DEBUG > 1;
 
@@ -1540,6 +1550,20 @@ sub replace {
     return $error if $error;
 
     if ( $conf->exists('business-onlinepayment-verification') ) {
+      #need to standardize paydate for this, false laziness with check
+      my( $m, $y );
+      if ( $self->paydate =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ ) {
+        ( $m, $y ) = ( $1, length($2) == 4 ? $2 : "20$2" );
+      } elsif ( $self->paydate =~ /^19(\d{2})[\/\-](\d{1,2})[\/\-]\d+$/ ) {
+        ( $m, $y ) = ( $2, "19$1" );
+      } elsif ( $self->paydate =~ /^(20)?(\d{2})[\/\-](\d{1,2})[\/\-]\d+$/ ) {
+        ( $m, $y ) = ( $3, "20$2" );
+      } else {
+        return "Illegal expiration date: ". $self->paydate;
+      }
+      $m = sprintf('%02d',$m);
+      $self->paydate("$y-$m-01");
+
       $error = $self->realtime_verify_bop({ 'method'=>'CC' });
       return $error if $error;
     }
index 90fda5e..4c28d0e 100644 (file)
@@ -1938,8 +1938,10 @@ sub realtime_verify_bop {
                                 );
 
     $reverse->content( 'action'        => 'Reverse Authorization',
+                       $self->_bop_auth(\%options),          
 
                        # B:OP
+                       'amount'        => '1.00',
                        'authorization' => $transaction->authorization,
                        'order_number'  => $ordernum,