_paypalPaymentPlugin = $paypalPaymentPlugin; $this->_queuedPayment = $queuedPayment; parent::__construct(null); } /** * @copydoc Form::display() * * @param null|Request $request * @param null|mixed $template */ public function display($request = null, $template = null) { // Application is set to sandbox mode and will not run the features of plugin if (Config::getVar('general', 'sandbox', false)) { error_log('Application is set to sandbox mode and no payment will be done via paypal'); TemplateManager::getManager($request) ->assign('message', 'common.sandbox') ->display('frontend/pages/message.tpl'); return; } try { $journal = $request->getJournal(); $paymentManager = Application::getPaymentManager($journal); $gateway = \Omnipay\Omnipay::create('PayPal_Rest'); $gateway->initialize([ 'clientId' => $this->_paypalPaymentPlugin->getSetting($journal->getId(), 'clientId'), 'secret' => $this->_paypalPaymentPlugin->getSetting($journal->getId(), 'secret'), 'testMode' => $this->_paypalPaymentPlugin->getSetting($journal->getId(), 'testMode'), ]); $transaction = $gateway->purchase([ 'amount' => number_format($this->_queuedPayment->getAmount(), 2, '.', ''), 'currency' => $this->_queuedPayment->getCurrencyCode(), 'description' => $paymentManager->getPaymentName($this->_queuedPayment), 'returnUrl' => $request->url(null, 'payment', 'plugin', [$this->_paypalPaymentPlugin->getName(), 'return'], ['queuedPaymentId' => $this->_queuedPayment->getId()]), 'cancelUrl' => $request->url(null, 'index'), ]); /** @var RestAuthorizeResponse */ $response = $transaction->send(); if ($response->isRedirect()) { $request->redirectUrl($response->getRedirectUrl()); } if (!$response->isSuccessful()) { throw new \Exception($response->getMessage()); } throw new \Exception('PayPal response was not redirect!'); } catch (\Exception $e) { error_log('PayPal transaction exception: ' . $e->getMessage()); $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('message', 'plugins.paymethod.paypal.error'); $templateMgr->display('frontend/pages/message.tpl'); } } }