public function getAgencyPaymentDone(Request $request) { if (!\Session::has('_temp_payment_sess')) { return redirect(url('agency'))->with('flashMessage', ['class' => 'danger', 'message' => 'Your session has expired, please try again.']); } $data = session('_temp_payment_sess'); $id = $request->get('paymentId'); $token = $request->get('token'); $payer_id = $request->get('PayerID'); $payment = PayPal::getById($id, $this->paypalApiContext); $paymentExecution = PayPal::PaymentExecution(); $paymentExecution->setPayerId($payer_id); $executePayment = $payment->execute($paymentExecution, $this->paypalApiContext); $agency = \Agency::getAgency(); try { switch ($data['type']) { case 'credit': \Agency::updateCredit($agency, $data['xCreditAmount']); break; case 'contract': \Agency::updateVIP($agency, true); break; default: break; } session(['_sess_agency' => ['model' => $agency]]); \Session::forget('_temp_payment_sess'); } catch (\Exception $e) { // TODO: Need better error handler // re-run try with queue? \Session::forget('_temp_payment_sess'); return redirect(url('agency'))->with('flashMessage', ['class' => 'danger', 'message' => $e->getMessage()]); } return redirect(url('agency'))->with('flashMessage', ['class' => 'success', 'message' => $data['successMessage']]); }