public function paymentJson() { $request = Ajde::app()->getRequest(); $provider = $request->getPostParam('provider', false); if (empty($provider)) { return ['success' => false, 'message' => trans('Please choose a payment provider')]; } // Check for current transaction $transaction = new TransactionModel(); $session = new Ajde_Session('AC.Shop'); if ($session->has('currentTransaction') && $transaction->loadByPK($session->get('currentTransaction'))) { if ($transaction->payment_status !== 'pending') { return ['success' => false, 'message' => trans('Payment already initiated, please refresh this page')]; } } else { return ['success' => false, 'message' => trans('No current order found')]; } $transaction->payment_provider = $provider; $provider = $transaction->getProvider(); $redirectUrl = $provider->getRedirectUrl(); if ($redirectUrl !== false) { $transaction->payment_status = 'requested'; $transaction->save(); if ($provider->usePostProxy()) { $this->setAction('postproxy'); $proxy = $this->getView(); $proxy->assign('provider', $provider); return ['success' => true, 'postproxy' => $proxy->render()]; } return ['success' => true, 'redirect' => $redirectUrl]; } return ['success' => false, 'message' => 'Could not contact the payment provider, please try again']; }