X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpayment_gateway.pm;h=afae2667edcd8e862692a1c80ab0427c35749068;hb=e2a9dcac3b97254fc0a64ce3e2bf1ce582ce8162;hp=fac738499df683e7cf892ab455fba70523d7ae23;hpb=85e677b86fc37c54e6de2b06340351a28f5a5916;p=freeside.git diff --git a/FS/FS/payment_gateway.pm b/FS/FS/payment_gateway.pm index fac738499..afae2667e 100644 --- a/FS/FS/payment_gateway.pm +++ b/FS/FS/payment_gateway.pm @@ -1,12 +1,10 @@ package FS::payment_gateway; +use base qw( FS::option_Common ); use strict; -use vars qw( @ISA $me $DEBUG ); -use FS::Record qw( qsearch qsearchs dbh ); -use FS::option_Common; -use FS::agent_payment_gateway; +use vars qw( $me $DEBUG ); +use FS::Record qw( qsearch dbh ); #qw( qsearch qsearchs dbh ); -@ISA = qw( FS::option_Common ); $me = '[ FS::payment_gateway ]'; $DEBUG=0; @@ -41,7 +39,7 @@ currently supported: =item gateway_namespace - Business::OnlinePayment, Business::OnlineThirdPartyPayment, or Business::BatchPayment -=item gateway_module - Business::OnlinePayment:: module name +=item gateway_module - Business::OnlinePayment:: (or other) module name =item gateway_username - payment gateway username @@ -51,6 +49,14 @@ currently supported: =item disabled - Disabled flag, empty or 'Y' +=item gateway_callback_url - For ThirdPartyPayment only, set to the URL that +the user should be redirected to on a successful payment. This will be sent +as a transaction parameter named "return_url". + +=item gateway_cancel_url - For ThirdPartyPayment only, set to the URL that +the user should be redirected to if they cancel the transaction. This will +be sent as a transaction parameter named "cancel_url". + =item auto_resolve_status - For BatchPayment only, set to 'approve' to auto-approve unresolved payments after some number of days, 'reject' to auto-decline them, or null to do nothing. @@ -128,6 +134,7 @@ sub check { || $self->ut_textn('gateway_username') || $self->ut_anything('gateway_password') || $self->ut_textn('gateway_callback_url') # a bit too permissive + || $self->ut_textn('gateway_cancel_url') || $self->ut_enum('disabled', [ '', 'Y' ] ) || $self->ut_enum('auto_resolve_status', [ '', 'approve', 'reject' ]) || $self->ut_numbern('auto_resolve_days') @@ -152,8 +159,8 @@ sub check { } # this little kludge mimics FS::CGI::popurl - $self->gateway_callback_url($self->gateway_callback_url. '/') - if ( $self->gateway_callback_url && $self->gateway_callback_url !~ /\/$/ ); + #$self->gateway_callback_url($self->gateway_callback_url. '/') + # if ( $self->gateway_callback_url && $self->gateway_callback_url !~ /\/$/ ); $self->SUPER::check; } @@ -162,13 +169,6 @@ sub check { Returns any agent overrides for this payment gateway. -=cut - -sub agent_payment_gateway { - my $self = shift; - qsearch('agent_payment_gateway', { 'gatewaynum' => $self->gatewaynum } ); -} - =item disable Disables this payment gateway: deletes all associated agent_payment_gateway @@ -219,7 +219,7 @@ Returns a semi-friendly label for the gateway. sub label { my $self = shift; $self->gatewaynum . ': ' . - $self->gateway_username . '@' . + ($self->gateway_username ? $self->gateway_username . '@' : '') . $self->gateway_module } @@ -268,9 +268,12 @@ sub batch_processor { eval "use Business::BatchPayment;"; die "couldn't load Business::BatchPayment: $@" if $@; - my $conf = new FS::Conf; - my $test_mode = $conf->exists('business-batchpayment-test_transaction'); - $opt{'test_mode'} = 1 if $test_mode; + #false laziness with processor + foreach (qw(username password)) { + if (length($self->get("gateway_$_"))) { + $opt{$_} = $self->get("gateway_$_"); + } + } my $module = $self->gateway_module; my $processor = eval { @@ -280,11 +283,46 @@ sub batch_processor { if $@; die "$module does not support test mode" - if $test_mode and not $processor->does('Business::BatchPayment::TestMode'); + if $opt{'test_mode'} + and not $processor->does('Business::BatchPayment::TestMode'); return $processor; } +=item processor OPTIONS + +Loads the module for the processor and returns an instance of it. + +=cut + +sub processor { + local $@; + my $self = shift; + my %opt = @_; + foreach (qw(action username password)) { + if (length($self->get("gateway_$_"))) { + $opt{$_} = $self->get("gateway_$_"); + } + } + $opt{'return_url'} = $self->gateway_callback_url; + $opt{'cancel_url'} = $self->gateway_cancel_url; + + my $conf = new FS::Conf; + my $test_mode = $conf->exists('business-batchpayment-test_transaction'); + $opt{'test_mode'} = 1 if $test_mode; + + my $namespace = $self->gateway_namespace; + eval "use $namespace"; + die "couldn't load $namespace: $@" if $@; + + if ( $namespace eq 'Business::BatchPayment' ) { + # at some point we can merge these, but there's enough special behavior... + return $self->batch_processor(%opt); + } else { + return $namespace->new( $self->gateway_module, $self->options, %opt ); + } +} + # _upgrade_data # # Used by FS::Upgrade to migrate to a new database.