custom/plugins/MagmodulesWebshopnl/src/Api/Controller/OrderController.php line 63

  1. <?php
  2. declare(strict_types=1);
  3. namespace MagmodulesWebshopnl\Api\Controller;
  4. use Shopware\Core\Framework\Context;
  5. use Shopware\Core\System\SystemConfig\SystemConfigService;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class OrderController extends AbstractController
  11. {
  12.     public function __construct(
  13.         private SystemConfigService $systemConfigService,
  14.         private OrderProcess $orderProcess
  15.     ) {
  16.     }
  17.     /**
  18.      * @Route("/api/webshopnl/order/{salesChannelId}",
  19.      *     name="api.webshopnl.order",  methods={"POST"},
  20.      *     defaults={"auth_required"=false, "_routeScope"={"administration"}})
  21.      */
  22.     public function createOrder(Context $contextRequest $request): JsonResponse
  23.     {
  24.         $bearerToken = (string) $request->headers->get('Authorization''');
  25.         $bearerToken str_replace("Bearer """$bearerToken);
  26.         $integrationToken $this->systemConfigService->get('MagmodulesWebshopnl.settings.integrationToken');
  27.         if ($bearerToken !== $integrationToken) {
  28.             return new JsonResponse([
  29.                 'status' => 401,
  30.                 'title' => 'The resource owner or authorization server denied the request',
  31.                 "detail" => 'Access token could not be verified',
  32.             ]);
  33.         }
  34.         $order json_decode($request->getContent(), true);
  35.         $salesChannelId $request->attributes->get('salesChannelId');
  36.         $response $this->orderProcess->processOrder($order$salesChannelId$context);
  37.         if (!$response || ($response['status'] ?? null) === 'Rejected') {
  38.             return new JsonResponse($response);
  39.         }
  40.         return new JsonResponse([
  41.             [
  42.                 'order_id' => $order['order_id'],
  43.                 'remote_order_id' => $response['id'] ?? $response['order_id'] ?? null,
  44.                 'merchant_id' => $order['merchant_id'],
  45.                 'status' => "CONFIRMED",
  46.                 'message' => 'Order was imported',
  47.             ],
  48.         ]);
  49.     }
  50.     /**
  51.      * @Route("/api/webshopnl/status/{orderId}",
  52.      *     name="api.webshopnl.status",  methods={"GET"},
  53.      *     defaults={"auth_required"=false, "_routeScope"={"administration"}})
  54.      */
  55.     public function getOrderStatus(Context $contextRequest $request): JsonResponse
  56.     {
  57.         $bearerToken $request->headers->get('Authorization');
  58.         if ($bearerToken) {
  59.             $bearerToken str_replace("Bearer """$bearerToken);
  60.             $integrationToken $this->systemConfigService->get('MagmodulesWebshopnl.settings.integrationToken');
  61.             if ($bearerToken === $integrationToken) {
  62.                 $orderId $request->attributes->get('orderId');
  63.                 return $this->orderProcess->getOrderStatus($orderId$context);
  64.             }
  65.             return new JsonResponse([
  66.                 'status' => 401,
  67.                 'title' => 'The resource owner or authorization server denied the request',
  68.                 "detail" => 'Access token could not be verified',
  69.             ]);
  70.         }
  71.         return new JsonResponse([
  72.             "status" => 401,
  73.             "title" => 'The resource owner or authorization server denied the request.',
  74.             "detail" => 'Missing Authorization header',
  75.         ]);
  76.     }
  77. }