X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpayment_gateway.pm;h=afae2667edcd8e862692a1c80ab0427c35749068;hb=0586dafb71594726138cd3b7b721b9f1a0b79ae2;hp=e94a62cf4399f661e478f126255f4c787d9cfb84;hpb=22336a0eeba10b4d1a4a78801f83f7cef56a1a20;p=freeside.git diff --git a/FS/FS/payment_gateway.pm b/FS/FS/payment_gateway.pm index e94a62cf4..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; @@ -53,11 +51,11 @@ currently supported: =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 "callback_url"). +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. PayPal -requires this; other gateways ignore it. +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 @@ -171,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 @@ -277,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 { @@ -289,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.