deal with the data we have as best we can without erroring out, RT#71513
authorIvan Kohler <ivan@freeside.biz>
Wed, 1 Feb 2017 17:08:01 +0000 (09:08 -0800)
committerIvan Kohler <ivan@freeside.biz>
Wed, 1 Feb 2017 17:08:01 +0000 (09:08 -0800)
FS/FS/payinfo_Mixin.pm

index ac92623..7401eb9 100644 (file)
@@ -197,10 +197,20 @@ sub payinfo_check {
 
   if ( $self->payby eq 'CARD' && ! $self->is_encrypted($self->payinfo) ) {
 
-    if ( $self->tokenized && ! $self->paycardtype ) {
-      return "paycardtype required (cannot be derived from a token)";
-    } else {
-      $self->set('paycardtype', cardtype($self->payinfo));
+    unless ( $self->paycardtype ) {
+
+      if ( $self->tokenized ) {
+        if ( $self->paymask =~ /^\d+x/ ) {
+          $self->set('paycardtype', cardtype($self->paymask));
+        } else {
+          $self->set('paycardtype', '');
+         # return "paycardtype required ".
+         #        "(can't derive from a token and no paymask w/prefix provided)";
+        }
+      } else {
+        $self->set('paycardtype', cardtype($self->payinfo));
+      }
+
     }
 
     if ( $ignore_masked_payinfo and $self->mask_payinfo eq $self->payinfo ) {
@@ -219,13 +229,22 @@ sub payinfo_check {
         $self->payinfo('N/A'); #??? re-masks card
       }
     }
+
   } else {
-    if ( $self->payby eq 'CARD' and $self->paymask ) {
-      # if we can't decrypt the card, at least detect the cardtype
-      $self->set('paycardtype', cardtype($self->paymask));
-    } else {
-      $self->set('paycardtype', '');
+
+    unless ( $self->paycardtype ) {
+
+      if ( $self->payby eq 'CARD' && $self->paymask =~ /^\d+x/  ) {
+        # if we can't decrypt the card, at least detect the cardtype
+        $self->set('paycardtype', cardtype($self->paymask));
+      } else {
+        $self->set('paycardtype', '');
+        # return "paycardtype required ".
+        #        "(can't derive from a token and no paymask w/prefix provided)";
+      }
+
     }
+
     if ( $self->is_encrypted($self->payinfo) ) {
       #something better?  all it would cause is a decryption error anyway?
       my $error = $self->ut_anything('payinfo');