X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FraudDetect%2FpreCharge.pm;h=02b2f24a82554d3087abb61591949763ddadb083;hb=d9599cfca52e5db568d40f76cd0e510a5cd2deda;hp=da97fb3adde464f1b2df9061c1501791eb88c159;hpb=e4baa8fbc931498d1cf7cc3bdcf32f8dbea21186;p=Business-OnlinePayment.git diff --git a/FraudDetect/preCharge.pm b/FraudDetect/preCharge.pm index da97fb3..02b2f24 100644 --- a/FraudDetect/preCharge.pm +++ b/FraudDetect/preCharge.pm @@ -1,23 +1,28 @@ - package Business::FraudDetect::preCharge; use strict; use Carp; use vars qw($VERSION @ISA); -#use Data::Dumper; - use Business::OnlinePayment::HTTPS; -@ISA = qw / Business::OnlinePayment::HTTPS /; -$VERSION = '0.01'; +@ISA = qw( Business::OnlinePayment::HTTPS ); + +$VERSION = '0.02'; + +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 - precharge_id precharge_security1 precharge_security2 force_success / ); + $self->build_subs(qw /currency fraud_score error_code + precharge_id precharge_security1 precharge_security2 force_success fraud_transaction_id / ); $self->currency('USD'); return $self; } @@ -26,7 +31,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; @@ -41,21 +45,28 @@ sub submit { ip_address )); - $self->remap_fields( qw / - ip_address ecom_billto_online_ip - zip ecom_billto_postal_code - phone ecom_billto_telecom_phone_number - first_name ecom_billto_postal_name_first - last_name ecom_billto_postal_name_last - email ecom_billto_online_email - amount ecom_transaction_amount / - ); - - - my %post_data = $self->get_fields(qw ( ecom_billto_online_ip ecom_billto_postal_code - ecom_billto_telecom_phone_number ecom_billto_online_email - ecom_transaction_amount currency - )); + $self->remap_fields( qw/ + ip_address ecom_billto_online_ip + zip ecom_billto_postal_postalcode + phone ecom_billto_telecom_phone_number + first_name ecom_billto_postal_name_first + last_name ecom_billto_postal_name_last + email ecom_billto_online_email + country ecom_billto_postal_countrycode + card_number ecom_payment_card_number + amount ecom_transaction_amount + / + ); + + + my %post_data = $self->get_fields(qw( + ecom_billto_online_ip ecom_billto_postal_postalcode + ecom_billto_telecom_phone_number ecom_billto_online_email + ecom_transaction_amount currency + ecom_billto_postal_name_first ecom_billto_postal_name_last + ecom_billto_postal_countrycode + ecom_payment_card_number + )); # set up some reasonable defaults @@ -63,16 +74,20 @@ sub submit { # split out MM/YY from exp date # - @post_data{qw/ecom_payment_card_expdate_month ecom_payment_card_expdate_year/} = $content{expiration} =~ m/(\d{1,2})(\d{2})/; - @post_data{qw/merchant_id security_1 security_2/} = ($self->precharge_id, - $self->precharge_security1, - $self->precharge_security2); + @post_data{ qw/ ecom_payment_card_expdate_month + ecom_payment_card_expdate_year + / + } = split(/\//,$content{expiration}); + + @post_data{qw/merchant_id security_1 security_2/} = ( + $self->precharge_id, + $self->precharge_security1, + $self->precharge_security2 + ); if ($self->test_transaction()) { $post_data{test} = 1; } - -# warn Dumper \%post_data; my ($page, $response, %headers) = $self->https_post(\%post_data); $self->server_response($page); @@ -126,17 +141,115 @@ sub submit { } if ($output{response} == 1 ) { - $self->is_success(1); - $self->risk_level($output{score}); - $self->result_code($output{response}); - $self->error_message('No Error. Risk assesment transaction successful'); + $self->is_success(1); + $self->fraud_score($output{score}); + $self->result_code($output{response}); + $self->fraud_transaction_id($output{transaction}); + $self->error_message('No Error. Risk assesment transaction successful'); } else { - $self->is_success(0); - $self->result_code($output{error}); - $self->error_message(exists $error_map{$output{error}} ? $error_map{$output{error}} : "preCharge error $output{error} occurred."); + $self->is_success(0); + $self->fraud_score($output{score}); + $self->result_code($output{error}); + $self->error_message( exists( $error_map{$output{error}} ) + ? $error_map{$output{error}} + : "preCharge error $output{error} occurred." + ); } } + 1; +=pod + +=head1 NAME + +Business::FraudDetect::preCharge - backend for Business::FraudDetect (part of Business::OnlinePayment) + +=head1 SYNOPSIS + + use Business::OnlinePayment + my $tx = new Business::OnlinePayment ( 'someGateway', + fraud_detect => 'preCharge', + maximum_fraud_score => 500, + preCharge_id => '1000000000000001', + preCharge_security1 => 'abcdef0123', + preCharge_security2 => '3210fedcba', + ); + $tx->content( + first_name => 'Larry Walton', + last_name => 'Sanders', + login => 'testdrive', + password => '', + action => 'Normal Authorization', + type => 'VISA', + state => 'MA', + zip => '02145', + country => 'US', + phone => '617 555 8900', + email => 'lws@sanders.com', + ip_address => '18.62.0.6', + card_number => '4111111111111111', + expiration => '0307', + amount => '25.00', + ); + $tx->submit(); + if ($tx->is_success()) { + # successful charge + my $score = $tx->fraud_score; + my $id = $tx->fraud_transaction_id; + #returns the preCharge transaction id + } else { + # unsucessful + my $score = $tx->fraud_score; + } + +=head1 DESCRIPTION + +This module provides a driver for the preCharge Risk Management Solutions API Version 1.7 (16 Jan 2006). + +See L and L for more information. + + +=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 + +This module provides no public methods. + +=head1 AUTHORS + +Lawrence Statton + +Jason Hall + +=head1 DISCLAIMER + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +=head1 SEE ALSO + +http://420.am/business-onlinepayment + +=cut