diff options
author | Jonathan Prykop <jonathan@freeside.biz> | 2016-12-28 14:18:29 -0600 |
---|---|---|
committer | Jonathan Prykop <jonathan@freeside.biz> | 2016-12-28 14:18:29 -0600 |
commit | 691b4de7c0a7d0e39bebe2ea7fadea5fb21b1539 (patch) | |
tree | ec486c00517954c0d37ae1ece07d2de790b306df /FS/FS/payinfo_Mixin.pm | |
parent | f26f4658d8e2a48439ca4f912dbc887cd008ee5b (diff) | |
parent | b6151684a227ad8018de4fdc661fcb61d00675a7 (diff) |
71513: Card tokenization [project branch merge]
Diffstat (limited to 'FS/FS/payinfo_Mixin.pm')
-rw-r--r-- | FS/FS/payinfo_Mixin.pm | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm index cf5a7df..1c45720 100644 --- a/FS/FS/payinfo_Mixin.pm +++ b/FS/FS/payinfo_Mixin.pm @@ -8,6 +8,7 @@ use FS::UID qw(driver_name); use FS::Cursor; use Time::Local qw(timelocal); +# allow_closed_replace only relevant to cust_pay/cust_refund, for upgrade tokenizing use vars qw( $ignore_masked_payinfo $allow_closed_replace ); =head1 NAME @@ -67,8 +68,9 @@ sub payinfo { my($self,$payinfo) = @_; if ( defined($payinfo) ) { + $self->paymask($self->mask_payinfo) unless $self->getfield('paymask') || $self->tokenized; #make sure old mask is set $self->setfield('payinfo', $payinfo); - $self->paymask($self->mask_payinfo) unless $payinfo =~ /^99\d{14}$/; #token + $self->paymask($self->mask_payinfo) unless $self->tokenized($payinfo); #remask unless tokenizing } else { $self->getfield('payinfo'); } @@ -129,7 +131,7 @@ sub mask_payinfo { # Check to see if it's encrypted... if ( ref($self) && $self->is_encrypted($payinfo) ) { return 'N/A'; - } elsif ( $payinfo =~ /^99\d{14}$/ || $payinfo eq 'N/A' ) { #token + } elsif ( $self->tokenized($payinfo) || $payinfo eq 'N/A' ) { #token return 'N/A (tokenized)'; #? } else { # if not, mask it... @@ -197,7 +199,7 @@ sub payinfo_check { my $payinfo = $self->payinfo; my $cardtype = cardtype($payinfo); - $cardtype = 'Tokenized' if $payinfo =~ /^99\d{14}$/; + $cardtype = 'Tokenized' if $self->tokenized; $self->set('paycardtype', $cardtype); if ( $ignore_masked_payinfo and $self->mask_payinfo eq $self->payinfo ) { @@ -212,7 +214,7 @@ sub payinfo_check { validate($self->payinfo) or return "Illegal credit card number"; return "Unknown card type" if $cardtype eq "Unknown"; } else { - $self->payinfo('N/A'); #??? + $self->payinfo('N/A'); #??? re-masks card } } } else { @@ -232,6 +234,7 @@ sub payinfo_check { } } + return ''; } =item payby_payinfo_pretty [ LOCALE ] @@ -451,6 +454,21 @@ sub process_set_cardtype { } } +=item tokenized [ PAYINFO ] + +Returns true if object payinfo is tokenized + +Optionally, an arbitrary payby and payinfo can be passed. + +=cut + +sub tokenized { + my $self = shift; + my $payinfo = scalar(@_) ? shift : $self->payinfo; + return 0 unless $payinfo; #avoid uninitialized value error + $payinfo =~ /^99\d{14}$/; +} + =back =head1 BUGS |