chengwl hai 23 horas
pai
achega
0e12fc2ba3

+ 46 - 1
packages/Webkul/Paypal/src/Http/Controllers/SmartButtonController.php

@@ -28,6 +28,8 @@ class SmartButtonController extends Controller
      */
      */
     public function createOrder()
     public function createOrder()
     {
     {
+        $this->resolveApiCartContext();
+
         try {
         try {
             return response()->json($this->smartButton->createOrder($this->buildRequestBody()));
             return response()->json($this->smartButton->createOrder($this->buildRequestBody()));
         } catch (\Exception $e) {
         } catch (\Exception $e) {
@@ -42,8 +44,20 @@ class SmartButtonController extends Controller
      */
      */
     public function captureOrder()
     public function captureOrder()
     {
     {
+        $this->resolveApiCartContext();
+
         try {
         try {
-            $this->smartButton->captureOrder(request()->input('orderData.orderID'));
+            $orderId = request()->input('orderData.orderID')
+                ?? request()->input('orderData.orderId')
+                ?? request()->input('orderID')
+                ?? request()->input('orderId')
+                ?? request()->input('paypalOrderId');
+
+            if (empty($orderId)) {
+                throw new \Exception('Missing PayPal order id for capture.');
+            }
+
+            $this->smartButton->captureOrder($orderId);
 
 
             return $this->saveOrder();
             return $this->saveOrder();
         } catch (\Exception $e) {
         } catch (\Exception $e) {
@@ -297,4 +311,35 @@ class SmartButtonController extends Controller
             throw new \Exception(trans('shop::app.checkout.cart.specify-payment-method'));
             throw new \Exception(trans('shop::app.checkout.cart.specify-payment-method'));
         }
         }
     }
     }
+
+    /**
+     * Resolve cart context for BagistoApi requests using bearer cart token.
+     *
+     * @return void
+     */
+    protected function resolveApiCartContext()
+    {
+        if (! request()->is('api/*')) {
+            return;
+        }
+
+        if (
+            ! class_exists(\Webkul\BagistoApi\Facades\TokenHeaderFacade::class)
+            || ! class_exists(\Webkul\BagistoApi\Facades\CartTokenFacade::class)
+        ) {
+            return;
+        }
+
+        $token = \Webkul\BagistoApi\Facades\TokenHeaderFacade::getAuthorizationBearerToken(request());
+
+        if (empty($token)) {
+            return;
+        }
+
+        $cart = \Webkul\BagistoApi\Facades\CartTokenFacade::getCartByToken($token);
+
+        if ($cart) {
+            Cart::setCart($cart);
+        }
+    }
 }
 }

+ 17 - 0
packages/Webkul/Paypal/src/Http/routes.php

@@ -20,6 +20,23 @@ Route::group(['middleware' => ['web']], function () {
     });
     });
 });
 });
 
 
+if (class_exists(\Webkul\BagistoApi\Http\Middleware\VerifyStorefrontKey::class)) {
+    Route::group([
+        'prefix'     => 'api/shop',
+        'middleware' => [
+            'api',
+            \Webkul\BagistoApi\Http\Middleware\VerifyStorefrontKey::class,
+            \Webkul\BagistoApi\Http\Middleware\SetLocaleChannel::class,
+        ],
+    ], function () {
+        Route::prefix('paypal/smart-button')->group(function () {
+            Route::get('/create-order', [SmartButtonController::class, 'createOrder'])->name('bagistoapi.paypal.smart-button.create-order');
+
+            Route::post('/capture-order', [SmartButtonController::class, 'captureOrder'])->name('bagistoapi.paypal.smart-button.capture-order');
+        });
+    });
+}
+
 Route::post('paypal/standard/ipn', [StandardController::class, 'ipn'])
 Route::post('paypal/standard/ipn', [StandardController::class, 'ipn'])
     ->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class)
     ->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class)
     ->name('paypal.standard.ipn');
     ->name('paypal.standard.ipn');