Explorar o código

feat: ✨ added StripeSuccess Route with session handling

IceToast %!s(int64=3) %!d(string=hai) anos
pai
achega
921135c5dd
Modificáronse 2 ficheiros con 80 adicións e 10 borrados
  1. 75 8
      app/Http/Controllers/Admin/PaymentController.php
  2. 5 2
      routes/web.php

+ 75 - 8
app/Http/Controllers/Admin/PaymentController.php

@@ -62,7 +62,6 @@ class PaymentController extends Controller
      */
      */
     public function PaypalPay(Request $request, CreditProduct $creditProduct)
     public function PaypalPay(Request $request, CreditProduct $creditProduct)
     {
     {
-        echo $creditProduct->currency_code;
         $request = new OrdersCreateRequest();
         $request = new OrdersCreateRequest();
         $request->prefer('return=representation');
         $request->prefer('return=representation');
         $request->body = [
         $request->body = [
@@ -90,7 +89,7 @@ class PaymentController extends Controller
                 ]
                 ]
             ],
             ],
             "application_context" => [
             "application_context" => [
-                "cancel_url" => route('payment.PaypalCancel'),
+                "cancel_url" => route('payment.Cancel'),
                 "return_url" => route('payment.PaypalSuccess', ['product' => $creditProduct->id]),
                 "return_url" => route('payment.PaypalSuccess', ['product' => $creditProduct->id]),
                 'brand_name' =>  config('app.name', 'Laravel'),
                 'brand_name' =>  config('app.name', 'Laravel'),
                 'shipping_preference'  => 'NO_SHIPPING'
                 'shipping_preference'  => 'NO_SHIPPING'
@@ -148,6 +147,7 @@ class PaymentController extends Controller
     {
     {
         /** @var CreditProduct $creditProduct */
         /** @var CreditProduct $creditProduct */
         $creditProduct = CreditProduct::findOrFail($laravelRequest->input('product'));
         $creditProduct = CreditProduct::findOrFail($laravelRequest->input('product'));
+
         /** @var User $user */
         /** @var User $user */
         $user = Auth::user();
         $user = Auth::user();
 
 
@@ -221,7 +221,7 @@ class PaymentController extends Controller
     /**
     /**
      * @param Request $request
      * @param Request $request
      */
      */
-    public function PaypalCancel(Request $request)
+    public function Cancel(Request $request)
     {
     {
         return redirect()->route('store.index')->with('success', 'Payment was Canceled');
         return redirect()->route('store.index')->with('success', 'Payment was Canceled');
     }
     }
@@ -235,8 +235,6 @@ class PaymentController extends Controller
     {
     {
         \Stripe\Stripe::setApiKey('sk_test_51Js6U8J2KSABgZztx8QWiohacnzGyIlpOk48DfSoUWPW8mhqLzxcQ5B9a1Wiz8jCC4Xfp3QeBDTsuSU7hkXEUksW00JyN08hoU');
         \Stripe\Stripe::setApiKey('sk_test_51Js6U8J2KSABgZztx8QWiohacnzGyIlpOk48DfSoUWPW8mhqLzxcQ5B9a1Wiz8jCC4Xfp3QeBDTsuSU7hkXEUksW00JyN08hoU');
 
 
-
-
         $request = \Stripe\Checkout\Session::create([
         $request = \Stripe\Checkout\Session::create([
             'line_items' => [
             'line_items' => [
                 [
                 [
@@ -264,8 +262,8 @@ class PaymentController extends Controller
             ],
             ],
 
 
             'mode' => 'payment',
             '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);
           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
      * @return string
      */
      */
     protected function getStripeClientId()
     protected function getStripeClientId()

+ 5 - 2
routes/web.php

@@ -62,10 +62,13 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
 
 
     #payments
     #payments
     Route::get('checkout/{creditProduct}', [PaymentController::class, 'checkOut'])->name('checkout');
     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/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/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');
     Route::get('users/logbackin', [UserController::class, 'logBackIn'])->name('users.logbackin');