summaryrefslogtreecommitdiff
path: root/FS/FS/ClientAPI
diff options
context:
space:
mode:
authormark <mark>2010-12-21 09:12:45 +0000
committermark <mark>2010-12-21 09:12:45 +0000
commitd6741df87df9e3352d7ae47a02d0e3f46154fef9 (patch)
tree1c26d9fe83c3c1af9c207a9e9e56ab9d766ff070 /FS/FS/ClientAPI
parent46e04077cc22ff9d31e8e9896cbf97e31f1b0e7d (diff)
changes to support eWay third-party payment, #10208
Diffstat (limited to 'FS/FS/ClientAPI')
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm76
-rw-r--r--FS/FS/ClientAPI/Signup.pm102
2 files changed, 109 insertions, 69 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index e41fe7d..ecabe31 100644
--- a/FS/FS/ClientAPI/MyAccount.pm
+++ b/FS/FS/ClientAPI/MyAccount.pm
@@ -237,6 +237,28 @@ sub logout {
}
}
+sub payment_gateway {
+ # internal use only
+ # takes a cust_main and a cust_payby entry, returns the payment_gateway
+ my $conf = new FS::Conf;
+ my $cust_main = shift;
+ my $cust_payby = shift;
+ my $gatewaynum = $conf->config('selfservice-payment_gateway');
+ if ( $gatewaynum ) {
+ my $pg = qsearchs('payment_gateway', { gatewaynum => $gatewaynum });
+ die "configured gatewaynum $gatewaynum not found!" if !$pg;
+ return $pg;
+ }
+ else {
+ return '' if ! FS::payby->realtime($cust_payby);
+ my $pg = $cust_main->agent->payment_gateway(
+ 'method' => FS::payby->payby2bop($cust_payby),
+ 'nofatal' => 1
+ );
+ return $pg;
+ }
+}
+
sub access_info {
my $p = shift;
@@ -262,18 +284,11 @@ sub access_info {
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
or return { 'error' => "unknown custnum $custnum" };
- $info->{hide_payment_fields} =
- [
- map { my $pg = '';
- if ( FS::payby->realtime($_) ) {
- $pg = $cust_main->agent->payment_gateway(
- 'method' => FS::payby->payby2bop($_),
- 'nofatal' => 1,
- );
- }
- $pg && $pg->gateway_namespace eq 'Business::OnlineThirdPartyPayment';
- }
- @{ $info->{cust_paybys} }
+ $info->{'hide_payment_fields'} = [
+ map {
+ my $pg = payment_gateway($cust_main, $_);
+ $pg && $pg->gateway_namespace eq 'Business::OnlineThirdPartyPayment';
+ } @{ $info->{cust_paybys} }
];
$info->{'self_suspend_reason'} =
@@ -532,18 +547,11 @@ sub payment_info {
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
or return { 'error' => "unknown custnum $custnum" };
- $return{hide_payment_fields} =
- [
- map { my $pg = '';
- if ( FS::payby->realtime($_) ) {
- $pg = $cust_main->agent->payment_gateway(
- 'method' => FS::payby->payby2bop($_),
- 'nofatal' => 1,
- );
- }
- $pg && $pg->gateway_namespace eq 'Business::OnlineThirdPartyPayment';
- }
- @{ $return{cust_paybys} }
+ $return{'hide_payment_fields'} = [
+ map {
+ my $pg = payment_gateway($cust_main, $_);
+ $pg && $pg->gateway_namespace eq 'Business::OnlineThirdPartyPayment';
+ } @{ $return{cust_paybys} }
];
$return{balance} = $cust_main->balance; #XXX pkg-balances?
@@ -692,6 +700,7 @@ sub process_payment {
'paycvv' => $paycvv,
'pkgnum' => $session->{'pkgnum'},
'discount_term' => $discount_term,
+ 'selfservice' => 1,
map { $_ => $p->{$_} } @{ $payby2fields{$payby} }
);
return { 'error' => $error } if $error;
@@ -746,18 +755,27 @@ sub realtime_collect {
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
or return { 'error' => "unknown custnum $custnum" };
+ my $amount;
+ if ( $p->{'amount'} ) {
+ $amount = $p->{'amount'};
+ }
+ elsif ( $session->{'pkgnum'} ) {
+ $amount = $cust_main->balance_pkgnum( $session->{'pkgnum'} );
+ }
+ else {
+ $amount = $cust_main->balance;
+ }
+
my $error = $cust_main->realtime_collect(
'method' => $p->{'method'},
+ 'amount' => $amount,
'pkgnum' => $session->{'pkgnum'},
'session_id' => $p->{'session_id'},
'apply' => 1,
+ 'selfservice'=> 1,
);
return { 'error' => $error } unless ref( $error );
- my $amount = $session->{'pkgnum'}
- ? $cust_main->balance_pkgnum( $session->{'pkgnum'} )
- : $cust_main->balance;
-
return { 'error' => '', amount => $amount, %$error };
}
@@ -1410,7 +1428,7 @@ sub _do_bop_realtime {
my $bill_error = $cust_main->bill
|| $cust_main->apply_payments_and_credits
- || $cust_main->realtime_collect;
+ || $cust_main->realtime_collect('selfservice' => 1);
if ( $cust_main->balance > $old_balance
&& $cust_main->balance > 0
diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm
index 65bb4e3..757dd47 100644
--- a/FS/FS/ClientAPI/Signup.pm
+++ b/FS/FS/ClientAPI/Signup.pm
@@ -321,23 +321,34 @@ sub signup_info {
warn "$me has agent $agent\n" if $DEBUG > 1;
if ( $agent ) { #else complain loudly?
$signup_info->{'hide_payment_fields'} = [];
- foreach my $payby (@{$signup_info->{payby}}) {
- warn "$me checking $payby payment fields\n" if $DEBUG > 1;
- my $hide = 0;
- if ( FS::payby->realtime($payby) ) {
- my $payment_gateway =
- $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby),
- 'nofatal' => 1,
- );
- if ( $payment_gateway
- && $payment_gateway->gateway_namespace
- eq 'Business::OnlineThirdPartyPayment'
- ) {
- warn "$me hiding $payby payment fields\n" if $DEBUG > 1;
- $hide = 1;
+ my $gatewaynum = $conf->config('selfservice-payment_gateway');
+ if ( $gatewaynum ) {
+ my $pg = qsearchs('payment_gateway', { gatewaynum => $gatewaynum });
+ die "configured gatewaynum $gatewaynum not found!" if !$pg;
+ my $hide = $pg->gateway_namespace eq 'Business::OnlineThirdPartyPayment';
+ $signup_info->{'hide_payment_fields'} = [
+ map { $hide } @{$signup_info->{'payby'}}
+ ];
+ }
+ else {
+ foreach my $payby (@{$signup_info->{payby}}) {
+ warn "$me checking $payby payment fields\n" if $DEBUG > 1;
+ my $hide = 0;
+ if ( FS::payby->realtime($payby) ) {
+ my $payment_gateway =
+ $agent->payment_gateway( 'method' => FS::payby->payby2bop($payby),
+ 'nofatal' => 1,
+ );
+ if ( $payment_gateway
+ && $payment_gateway->gateway_namespace
+ eq 'Business::OnlineThirdPartyPayment'
+ ) {
+ warn "$me hiding $payby payment fields\n" if $DEBUG > 1;
+ $hide = 1;
+ }
}
- }
- push @{$signup_info->{'hide_payment_fields'}}, $hide;
+ push @{$signup_info->{'hide_payment_fields'}}, $hide;
+ } # foreach $payby
}
}
warn "$me done setting agent-specific payment flag\n" if $DEBUG > 1;
@@ -698,6 +709,7 @@ sub new_customer {
$bill_error = $cust_main->realtime_collect(
method => FS::payby->payby2bop( $packet->{payby} ),
depend_jobnum => $placeholder->jobnum,
+ selfservice => 1,
);
#warn "$me error collecting from new customer: $bill_error"
# if $bill_error;
@@ -787,29 +799,36 @@ sub capture_payment {
my $conf = new FS::Conf;
- my $url = $packet->{url};
- my $payment_gateway =
- qsearchs('payment_gateway', { 'gateway_callback_url' => popurl(0, $url) } );
-
- unless ($payment_gateway) {
-
- my ( $processor, $login, $password, $action, @bop_options ) =
- $conf->config('business-onlinepayment');
- $action ||= 'normal authorization';
- pop @bop_options if scalar(@bop_options) % 2 && $bop_options[-1] =~ /^\s*$/;
- die "No real-time processor is enabled - ".
- "did you set the business-onlinepayment configuration value?\n"
- unless $processor;
-
- $payment_gateway = new FS::payment_gateway( {
- gateway_namespace => $conf->config('business-onlinepayment-namespace'),
- gateway_module => $processor,
- gateway_username => $login,
- gateway_password => $password,
- gateway_action => $action,
- options => [ ( @bop_options ) ],
- });
-
+ my $payment_gateway;
+ if ( my $gwnum = $conf->config('selfservice-payment_gateway') ) {
+ $payment_gateway = qsearchs('payment_gateway', { 'gatewaynum' => $gwnum })
+ or die "configured gatewaynum $gwnum not found!";
+ }
+ else {
+ my $url = $packet->{url};
+
+ $payment_gateway = qsearchs('payment_gateway',
+ { 'gateway_callback_url' => popurl(0, $url) }
+ );
+ if (!$payment_gateway) {
+
+ my ( $processor, $login, $password, $action, @bop_options ) =
+ $conf->config('business-onlinepayment');
+ $action ||= 'normal authorization';
+ pop @bop_options if scalar(@bop_options) % 2 && $bop_options[-1] =~ /^\s*$/;
+ die "No real-time processor is enabled - ".
+ "did you set the business-onlinepayment configuration value?\n"
+ unless $processor;
+
+ $payment_gateway = new FS::payment_gateway( {
+ gateway_namespace => $conf->config('business-onlinepayment-namespace'),
+ gateway_module => $processor,
+ gateway_username => $login,
+ gateway_password => $password,
+ gateway_action => $action,
+ options => [ ( @bop_options ) ],
+ });
+ }
}
die "No real-time third party processor is enabled - ".
@@ -847,7 +866,10 @@ sub capture_payment {
my $cust_main = $cust_pay_pending->cust_main;
my $bill_error =
- $cust_main->realtime_botpp_capture( $cust_pay_pending, %{$packet->{data}} );
+ $cust_main->realtime_botpp_capture( $cust_pay_pending,
+ %{$packet->{data}},
+ apply => 1,
+ );
return { 'error' => ( $bill_error->{bill_error} ? '_decline' : '' ),
%$bill_error,