diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index c61e1d49..af3c8077 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -62,7 +62,6 @@ class PaymentController extends Controller */ public function PaypalPay(Request $request, CreditProduct $creditProduct) { - echo $creditProduct->currency_code; $request = new OrdersCreateRequest(); $request->prefer('return=representation'); $request->body = [ @@ -90,7 +89,7 @@ class PaymentController extends Controller ] ], "application_context" => [ - "cancel_url" => route('payment.PaypalCancel'), + "cancel_url" => route('payment.Cancel'), "return_url" => route('payment.PaypalSuccess', ['product' => $creditProduct->id]), 'brand_name' => config('app.name', 'Laravel'), 'shipping_preference' => 'NO_SHIPPING' @@ -148,6 +147,7 @@ class PaymentController extends Controller { /** @var CreditProduct $creditProduct */ $creditProduct = CreditProduct::findOrFail($laravelRequest->input('product')); + /** @var User $user */ $user = Auth::user(); @@ -221,7 +221,7 @@ class PaymentController extends Controller /** * @param Request $request */ - public function PaypalCancel(Request $request) + public function Cancel(Request $request) { return redirect()->route('store.index')->with('success', 'Payment was Canceled'); } @@ -235,8 +235,6 @@ class PaymentController extends Controller { \Stripe\Stripe::setApiKey('sk_test_51Js6U8J2KSABgZztx8QWiohacnzGyIlpOk48DfSoUWPW8mhqLzxcQ5B9a1Wiz8jCC4Xfp3QeBDTsuSU7hkXEUksW00JyN08hoU'); - - $request = \Stripe\Checkout\Session::create([ 'line_items' => [ [ @@ -264,8 +262,8 @@ class PaymentController extends Controller ], 'mode' => 'payment', - 'success_url' => route('payment.PaypalCancel'), - 'cancel_url' => route('payment.PaypalCancel'), + 'success_url' => route('payment.StripeSuccess').'?session_id={CHECKOUT_SESSION_ID}', + 'cancel_url' => route('payment.Cancel'), ]); @@ -273,7 +271,76 @@ class PaymentController extends Controller return redirect($request->url, 303); } - /** + /** + * @param Request $request + */ + public function StripeSuccess(Request $request) + { + echo $request->input('product'); + \Stripe\Stripe::setApiKey('sk_test_51Js6U8J2KSABgZztx8QWiohacnzGyIlpOk48DfSoUWPW8mhqLzxcQ5B9a1Wiz8jCC4Xfp3QeBDTsuSU7hkXEUksW00JyN08hoU'); + /** @var CreditProduct $creditProduct */ + $creditProduct = CreditProduct::findOrFail($request->input('product')); + + /** @var User $user */ + $user = Auth::user(); + + + + try{ + $response = \Stripe\Checkout\Session::retrieve($request->input('session_id')); + + if ($response->payment_status == "paid") { + + //update credits + $user->increment('credits', $creditProduct->quantity); + + //update server limit + if (Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE') !== 0) { + if ($user->server_limit < Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE')) { + $user->update(['server_limit' => Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE')]); + } + } + + //update role + if ($user->role == 'member') { + $user->update(['role' => 'client']); + } + + //store payment + $payment = Payment::create([ + 'user_id' => $user->id, + 'payment_id' => $response->result->id, + 'payer_id' => $request->input('PayerID'), + 'type' => 'Credits', + 'status' => $response->payment_status, + 'amount' => $creditProduct->quantity, + 'price' => $creditProduct->price, + 'tax_value' => $creditProduct->getTaxValue(), + 'tax_percent' => $creditProduct->getTaxPercent(), + 'total_price' => $creditProduct->getTotalPrice(), + 'currency_code' => $creditProduct->currency_code, + 'payer' => json_encode($response->result->payer), + ]); + + //payment notification + $user->notify(new ConfirmPaymentNotification($payment)); + + event(new UserUpdateCreditsEvent($user)); + + //redirect back to home + return redirect()->route('home')->with('success', 'Your credit balance has been increased!'); + } + }catch (HttpException $ex) { + if (env('APP_ENV') == 'local') { + echo $ex->statusCode; + dd($ex->getMessage()); + } else { + abort(422); + } + } + } + + /** * @return string */ protected function getStripeClientId() diff --git a/routes/web.php b/routes/web.php index 4c323244..cb45ed22 100644 --- a/routes/web.php +++ b/routes/web.php @@ -62,10 +62,13 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () { #payments Route::get('checkout/{creditProduct}', [PaymentController::class, 'checkOut'])->name('checkout'); - Route::get('payment/PaypalSuccess', [PaymentController::class, 'PaypalSuccess'])->name('payment.PaypalSuccess'); - Route::get('payment/PaypalCancel', [PaymentController::class, 'PaypalCancel'])->name('payment.PaypalCancel'); Route::get('payment/PaypalPay/{creditProduct}', [PaymentController::class, 'PaypalPay'])->name('payment.PaypalPay'); + Route::get('payment/PaypalSuccess', [PaymentController::class, 'PaypalSuccess'])->name('payment.PaypalSuccess'); Route::get('payment/StripePay/{creditProduct}', [PaymentController::class, 'StripePay'])->name('payment.StripePay'); + Route::get('payment/StripeSuccess', [PaymentController::class, 'StripeSuccess'])->name('payment.StripeSuccess'); + + Route::get('payment/Cancel', [PaymentController::class, 'Cancel'])->name('payment.Cancel'); + Route::get('users/logbackin', [UserController::class, 'logBackIn'])->name('users.logbackin');