From fb8d21e0431c9b3c081faf043cc0127f9d08e496 Mon Sep 17 00:00:00 2001 From: lawrence Date: Thu, 17 Aug 2006 14:23:07 +0000 Subject: [PATCH] Fixup parameter passing, finish changing names & doco to match --- FraudDetect.pm | 20 +++++++++---------- FraudDetect/preCharge.pm | 50 +++++++++++++++++++++++++++++++++++++----------- OnlinePayment.pm | 30 +++++++++++------------------ 3 files changed, 59 insertions(+), 41 deletions(-) diff --git a/FraudDetect.pm b/FraudDetect.pm index 3624f5a..d624f3c 100644 --- a/FraudDetect.pm +++ b/FraudDetect.pm @@ -17,13 +17,11 @@ Business::FraudDetect - A cohort to Business::OnlinePayment =head1 SYNOPSIS - my %processor_info = ( risk_Management => 'preCharge', - maximum_risk => 500, - risk_management_params => { - preCharge_id => '1000000000000001', - preCharge_security1 => 'abcdef0123', - preCharge_security2 => '3210fedcba', - }, + my %processor_info = ( fraud_detection => 'preCharge', + maximum_fraud_score => 500, + preCharge_id => '1000000000000001', + preCharge_security1 => 'abcdef0123', + preCharge_security2 => '3210fedcba', ) my $transaction = new Business::OnlinePayment($processor, %processor_info); $transaction->content( @@ -49,17 +47,17 @@ The user instantiates a Business::OnlinePayment object per usual, adding in thre =over 4 -=item * risk_Management +=item * fraud_detection Which Fraud Detection module to use. -=item * maximum_risk +=item * maximum_fraud_score FraudDetection drivers are expected to return a numeric "risk" factor, this parameter allows you to set the threshold to reject the transaction based on that risk. Higher numbers are "riskier" transactions. -=item * risk_management_params +=item * other driver-specific parameters. -Driver-specific parameters. Extant module uses this to pass in identity/authorization credentials. +Consult the specific Fraud Detection module you intend to use for its required parameters. =back diff --git a/FraudDetect/preCharge.pm b/FraudDetect/preCharge.pm index 2d34544..aa8bcb3 100644 --- a/FraudDetect/preCharge.pm +++ b/FraudDetect/preCharge.pm @@ -11,12 +11,19 @@ use Business::OnlinePayment::HTTPS; $VERSION = '0.01'; +sub _glean_parameters_from_parent { + my ($self, $parent) = @_; + foreach my $method (qw / precharge_id precharge_security1 precharge_security2 /) { + $self->$method($parent->$method); + } +} + sub set_defaults { my ($self) = @_; $self->server('api.precharge.net'); $self->port(443); $self->path('/charge'); - $self->build_subs(qw /currency risk_level error_code + $self->build_subs(qw /currency fraud_score error_code precharge_id precharge_security1 precharge_security2 force_success / ); $self->currency('USD'); return $self; @@ -26,7 +33,6 @@ sub submit { my ($self) = @_; if ($self->force_success()) { $self->is_success(1); - $self->risk_level(100); $self->result_code('1'); $self->error_message('No Error. Force success path'); return $self; @@ -127,7 +133,7 @@ sub submit { if ($output{response} == 1 ) { $self->is_success(1); - $self->risk_level($output{score}); + $self->fraud_score($output{score}); $self->result_code($output{response}); $self->error_message('No Error. Risk assesment transaction successful'); } else { @@ -137,6 +143,9 @@ sub submit { } } + + + 1; @@ -151,13 +160,11 @@ Business::FraudDetect::preCharge - backend for Business::FraudDetect (part of Bu use Business::OnlinePayment my $tx = new Business::OnlinePayment ( 'someGateway', - risk_management => 'preCharge', - maximum_risk => 500, - risk_management_params => { - preCharge_id => '1000000000000001', - preCharge_security1 => 'abcdef0123', - preCharge_security2 => '3210fedcba', - } + fruad_detection => 'preCharge', + maximum_fraud_score => 500, + preCharge_id => '1000000000000001', + preCharge_security1 => 'abcdef0123', + preCharge_security2 => '3210fedcba', ); $tx->content( first_name => 'Larry Walton', @@ -189,7 +196,28 @@ This module provides a driver for the preCharge Risk Management Solutions API Ve See L and L for more information. -Whe constructing the Business::OnlinePayment object, three risk management parameters must be passed in for the preCharge object to be properly constructed. These are preCharge_id (called the merchant_id in the preCharge API manual), and two security codes (preCharge_security1 and preCharge_security2). + +=head1 CONSTRUCTION + +Whe constructing the Business::OnlinePayment object, three risk management parameters must be included for the preCharge object to be properly constructed. + +=over 4 + +=item * precharge_id + +This field is called "merchant_id" in the preCharge API manual + + +=item * precharge_security1 + +This field is called "security_1" in the preCharge API manual + +=item * precharge_secuirty2 + +This field is called "security_2" in the preCharge API manual + +=back + =head1 METHODS diff --git a/OnlinePayment.pm b/OnlinePayment.pm index 2e9d35d..2b4e17b 100644 --- a/OnlinePayment.pm +++ b/OnlinePayment.pm @@ -6,7 +6,7 @@ use Carp; use Symbol; require 5.005; -##use Data::Dumper; +use Data::Dumper; #require Exporter; @@ -32,8 +32,7 @@ my %fields = ( server => undef, port => undef, path => undef, - risk_management => undef, - risk_management_params => undef, + fraud_detect => undef, server_response => undef, maximum_risk => undef, ); @@ -73,7 +72,7 @@ sub new { $self->{_child_submit} = \&$submit; *{"${subclass}::submit"} = sub { my $self = shift; - $self->_pre_submit(@_); + $self->_pre_submit(); } } @@ -89,7 +88,7 @@ sub _risk_detect { $risk_transaction->content( %parent_content ); $risk_transaction->submit(); if ($risk_transaction->is_success()) { - if ( $risk_transaction->risk_level <= $self->maximum_risk()) { + if ( $risk_transaction->fraud_score <= $self->maximum_fraud_score()) { $self->{_child_submit}->($self); } else { $self->is_success(0); @@ -103,41 +102,34 @@ sub _risk_detect { sub _pre_submit{ my ($self) = @_; - my $risk_detection = $self->risk_management(); + my $fraud_detection = $self->fraud_detect(); # # early return if user does not want optional risk mgt # - return $self->{_child_submit}->($self,@_) unless $risk_detection && length $risk_detection; + return $self->{_child_submit}->($self,@_) unless $fraud_detection && length $fraud_detection; # # Search for an appropriate FD module # - foreach my $subclass ( q(Business::OnlinePayment::) . $risk_detection, - q(Business::FraudDetect::).$risk_detection) { + foreach my $subclass ( q(Business::OnlinePayment::) . $fraud_detection, + q(Business::FraudDetect::).$fraud_detection) { if (!defined(&$subclass)) { eval "use $subclass"; if ($@) { - Carp::croak("serious problem loading risk_detection module ($@)") unless + Carp::croak("serious problem loading fraud_detection module ($@)") unless $@ =~ m/^Can\'t locate/; } else { - my $risk_tx = bless ( { processor => $risk_detection } , $subclass ); + my $risk_tx = bless ( { processor => $fraud_detection } , $subclass ); $risk_tx->build_subs(keys %fields); if ($risk_tx->can('set_defaults')) { $risk_tx->set_defaults(); } - my %risk_params = %{$self->risk_management_params()}; - foreach my $key ( keys %risk_params ) { - my $value = $risk_params{$key}; - $key = lc($key); - $key =~ s/^\-//; - $risk_tx->build_subs($key); - $risk_tx->$key($value); - } + $risk_tx->_glean_parameters_from_parent($self); return $self->_risk_detect($risk_tx); } } -- 2.11.0