Bug 30944: Fix cancel recalls actions
[koha-ffzg.git] / opac / opac-account-pay.pl
index e8664e4..30be841 100755 (executable)
@@ -4,38 +4,44 @@
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 3 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use utf8;
 
 use Modern::Perl;
 
 use CGI;
-use HTTP::Request::Common;
-use LWP::UserAgent;
-use URL::Encode qw(url_encode url_params_mixed);
-use URI;
 
-use C4::Auth;
+use C4::Auth qw( get_template_and_user );
 use C4::Output;
 use C4::Context;
-use C4::Budgets qw(GetCurrency);
+use Koha::Acquisition::Currencies;
 use Koha::Database;
+use Koha::Plugins::Handler;
 
-my $cgi = new CGI;
+my $cgi = CGI->new;
+my $payment_method = $cgi->param('payment_method');
+my @accountlines   = $cgi->multi_param('accountline');
+
+my $use_plugin = Koha::Plugins::Handler->run(
+    {   class  => $payment_method,
+        method => 'opac_online_payment',
+        cgi    => $cgi,
+    }
+);
 
-unless ( C4::Context->preference('EnablePayPalOpacPayments') ) {
+unless ( $use_plugin ) {
     print $cgi->redirect("/cgi-bin/koha/errors/404.pl");
     exit;
 }
@@ -45,87 +51,22 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
         template_name   => "opac-account-pay-error.tt",
         query           => $cgi,
         type            => "opac",
-        authnotrequired => 0,
-        debug           => 1,
     }
 );
 
-my $payment_method = $cgi->param('payment_method');
-my @accountlines = $cgi->param('accountline');
-
 my $amount_to_pay =
   Koha::Database->new()->schema()->resultset('Accountline')->search( { accountlines_id => { -in => \@accountlines } } )
   ->get_column('amountoutstanding')->sum();
 $amount_to_pay = sprintf( "%.2f", $amount_to_pay );
 
-my $active_currency = GetCurrency();
+my $active_currency = Koha::Acquisition::Currencies->get_active;
 
 my $error = 0;
-if ( $payment_method eq 'paypal' ) {
-    my $ua = LWP::UserAgent->new;
-
-    my $amount = url_encode($amount_to_pay);
-
-    my $url =
-      C4::Context->preference('PayPalSandboxMode')
-      ? 'https://api-3t.sandbox.paypal.com/nvp'
-      : 'https://api-3t.paypal.com/nvp';
-
-    my $opac_base_url = C4::Context->preference('OPACBaseURL');
-
-    my $return_url = URI->new( $opac_base_url . "/cgi-bin/koha/opac-account-pay-paypal-return.pl" );
-    $return_url->query_form( { amount => $amount, accountlines => \@accountlines } );
-
-    my $cancel_url = URI->new( $opac_base_url . "/cgi-bin/koha/opac-account.pl" );
-
-    my $nvp_params = {
-        'USER'      => C4::Context->preference('PayPalUser'),
-        'PWD'       => C4::Context->preference('PayPalPwd'),
-        'SIGNATURE' => C4::Context->preference('PayPalSignature'),
 
-        # API Version and Operation
-        'METHOD'  => 'SetExpressCheckout',
-        'VERSION' => '82.0',
-
-        # API specifics for SetExpressCheckout
-        'NOSHIPPING'                            => 1,
-        'REQCONFIRMSHIPPING'                    => 0,
-        'ALLOWNOTE'                             => 0,
-        'BRANDNAME'                             => C4::Context->preference('LibraryName'),
-        'CANCELURL'                             => $cancel_url->as_string(),
-        'RETURNURL'                             => $return_url->as_string(),
-        'PAYMENTREQUEST_0_CURRENCYCODE'         => $active_currency->{currency},
-        'PAYMENTREQUEST_0_AMT'                  => $amount_to_pay,
-        'PAYMENTREQUEST_0_PAYMENTACTION'        => 'Sale',
-        'PAYMENTREQUEST_0_ALLOWEDPAYMENTMETHOD' => 'InstantPaymentOnly',
-        'PAYMENTREQUEST_0_DESC'                 => C4::Context->preference('PayPalChargeDescription'),
-    };
-
-    my $response = $ua->request( POST $url, $nvp_params );
-
-    if ( $response->is_success ) {
-        my $params = url_params_mixed( $response->decoded_content );
-
-        if ( $params->{ACK} eq "Success" ) {
-            my $token = $params->{TOKEN};
-
-            my $redirect_url =
-              C4::Context->preference('PayPalSandboxMode')
-              ? "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token="
-              : "https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=";
-            print $cgi->redirect( $redirect_url . $token );
-
-        }
-        else {
-            $template->param( error => "PAYPAL_ERROR_PROCESSING" );
-            $error = 1;
-        }
-
-    }
-    else {
-        $template->param( error => "PAYPAL_UNABLE_TO_CONNECT" );
-        $error = 1;
+Koha::Plugins::Handler->run(
+    {
+        class  => $payment_method,
+        method => 'opac_online_payment_begin',
+        cgi    => $cgi,
     }
-}
-
-output_html_with_http_headers( $cgi, $cookie, $template->output ) if $error;
+);