summaryrefslogtreecommitdiff
path: root/FS/FS
diff options
context:
space:
mode:
authorivan <ivan>2003-10-24 19:30:34 +0000
committerivan <ivan>2003-10-24 19:30:34 +0000
commit1c44b800d49605b941d04726bcb60fd9015bb460 (patch)
treee424adabc6486eaa568093b72436646a5bae9a01 /FS/FS
parent3082b32708b32720e11114837ad194b96c14d717 (diff)
cvv!
Diffstat (limited to 'FS/FS')
-rw-r--r--FS/FS/ClientAPI/Signup.pm5
-rw-r--r--FS/FS/cust_bill.pm30
-rw-r--r--FS/FS/cust_main.pm20
3 files changed, 49 insertions, 6 deletions
diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm
index 5ca1f93ed..92fc6361d 100644
--- a/FS/FS/ClientAPI/Signup.pm
+++ b/FS/FS/ClientAPI/Signup.pm
@@ -60,6 +60,8 @@ sub signup_info {
'payby' => [ $conf->config('signup_server-payby') ],
+ 'cvv_enabled' => defined dbdef->table('cust_main')->column('paycvv'),
+
'msgcat' => { map { $_=>gettext($_) } qw(
passwords_dont_match invalid_card unknown_card_type not_a
) },
@@ -116,7 +118,8 @@ sub new_customer {
map { $_ => $packet->{$_} } qw(
last first ss company address1 address2 city county state zip country
- daytime night fax payby payinfo paydate payname referral_custnum comments
+ daytime night fax payby payinfo paycvv paydate payname referral_custnum
+ comments
),
} );
diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm
index b9f614651..a4039c37c 100644
--- a/FS/FS/cust_bill.pm
+++ b/FS/FS/cust_bill.pm
@@ -740,15 +740,20 @@ sub realtime_bop {
my %content;
if ( $method eq 'CC' ) {
+
$content{card_number} = $cust_main->payinfo;
$cust_main->paydate =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/;
$content{expiration} = "$2/$1";
- if ( qsearch('cust_pay', { 'custnum' => $cust_main->custnum,
+
+ $content{cvv2} = $cust_main->paycvv
+ if defined $cust_main->dbdef_table->column('paycvv')
+ && length($cust_main->paycvv);
+
+ $content{recurring_billing} = 'YES'
+ if qsearch('cust_pay', { 'custnum' => $cust_main->custnum,
'payby' => 'CARD',
- 'payinfo' => $cust_main->payinfo, } )
- ) {
- $content{recurring_billing} = 'YES';
- }
+ 'payinfo' => $cust_main->payinfo, } );
+
} elsif ( $method eq 'ECHECK' ) {
my($account_number,$routing_code) = $cust_main->payinfo;
( $content{account_number}, $content{routing_code} ) =
@@ -831,6 +836,21 @@ sub realtime_bop {
}
+ #remove paycvv after initial transaction
+ #make this disable-able via a config option if anyone insists?
+ # (though that probably violates cardholder agreements)
+ if ( defined $cust_main->dbdef_table->column('paycvv')
+ && length($cust_main->paycvv)
+ ) {
+ my $new = new FS::cust_main { $cust_main->hash };
+ $new->paycvv('');
+ my $error = $new->replace($cust_main);
+ if ( $error ) {
+ warn "error removing cvv: $error\n";
+ }
+ }
+
+ #result handling
if ( $transaction->is_success() ) {
my %method2payby = (
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index a783085ae..831022bef 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -699,6 +699,21 @@ sub check {
or return gettext('invalid_card'); # . ": ". $self->payinfo;
return gettext('unknown_card_type')
if cardtype($self->payinfo) eq "Unknown";
+ if ( defined $self->dbdef_table->column('paycvv') ) {
+ if ( length($self->paycvv) ) {
+ if ( cardtype($self->payinfo) eq 'American Express card' ) {
+ $self->paycvv =~ /^(\d{4})$/
+ or return "CVV2 (CID) for American Express cards is four digits.";
+ $self->paycvv($1);
+ } else {
+ $self->paycvv =~ /^(\d{3})$/
+ or return "CVV2 (CVC2/CID) is three digits.";
+ $self->paycvv($1);
+ }
+ } else {
+ $self->paycvv('');
+ }
+ }
} elsif ( $self->payby eq 'CHEK' ) {
@@ -707,6 +722,7 @@ sub check {
$payinfo =~ /^(\d+)\@(\d{9})$/ or return 'invalid echeck account@aba';
$payinfo = "$1\@$2";
$self->payinfo($payinfo);
+ $self->paycvv('') if $self->dbdef_table->column('paycvv');
} elsif ( $self->payby eq 'LECB' ) {
@@ -715,11 +731,13 @@ sub check {
$payinfo =~ /^1?(\d{10})$/ or return 'invalid btn billing telephone number';
$payinfo = $1;
$self->payinfo($payinfo);
+ $self->paycvv('') if $self->dbdef_table->column('paycvv');
} elsif ( $self->payby eq 'BILL' ) {
$error = $self->ut_textn('payinfo');
return "Illegal P.O. number: ". $self->payinfo if $error;
+ $self->paycvv('') if $self->dbdef_table->column('paycvv');
} elsif ( $self->payby eq 'COMP' ) {
@@ -730,6 +748,7 @@ sub check {
$error = $self->ut_textn('payinfo');
return "Illegal comp account issuer: ". $self->payinfo if $error;
+ $self->paycvv('') if $self->dbdef_table->column('paycvv');
} elsif ( $self->payby eq 'PREPAY' ) {
@@ -740,6 +759,7 @@ sub check {
return "Illegal prepayment identifier: ". $self->payinfo if $error;
return "Unknown prepayment identifier"
unless qsearchs('prepay_credit', { 'identifier' => $self->payinfo } );
+ $self->paycvv('') if $self->dbdef_table->column('paycvv');
}