Storefront: User cart überschreiben (Link zu einem Cart)

Hi zusammen,

ich möchte Carts, die wir über die Store API erstellt haben per Link an User verschicken. Die Store API gibt uns dabei den Token zurück, über den der Warenkorb identifiziert wird.

(Wir erstellen automatisiert Carts, die Links werden dann verschickt oder verteilt und der Kunde soll nur noch seine Adresse / Zahlungsdetails angeben und die Bestellung prüfen, aber keine Product-Discovery mehr machen.)

Ich habe nun ein Plugin erstellt, welche eine neue Route definiert und dieses Token entgegen nimmt. Also: /my-company/cart/cart-token

Das klappt bisher wunderbar, ich kann den entsprechenden Cart und den des Users laden:

/**
* @Route("/my-company/cart/{id}", name="frontend.my-company.cart-link", methods={"GET"})
*/
public function cartLink(Request $request, SalesChannelContext $context) {
  /** @var Cart $cart */
  $cart = $this->cartService->getCart(
    $request->get('id'),
    $context
  );
  $userCart = $this->cartService->getCart($context->getToken(), $context);

  // override $userCart with $cart or create new cart and clone line items, discounts etc. into it?

  return $this->forwardToRoute('frontend.checkout.cart.page');
}

 Ich würde gerne den Cart in der Session des Users mit dem Cart aus dem tokes aus dem link ersetzen. (Falls der User Artikel im Warenkob hat, wären diese dann weg) Oder, falls das nicht geht, den $userCart leeren und dann line items, Discounts,Sshipping etc, „rüberkopieren“

Könnt ihr mir da weiterhelfen? Was wäre der richtige Ansatz hier?

 

Beste Grüße aus Münster

Nick

Ist ja leider relaiv ruhig hier, die Lösung war denkbar einfach, trotzdem habe ich eine ganze Weile gesucht, vielleicht hilft es ja in Zukunft jemandem:

  /**
   * @Route("/my-company/cart/{id}", name="frontend.my-company.cart-link", methods={"GET"})
   * @param Request $request
   * @param SalesChannelContext $context
   * @return RedirectResponse
   */
  public function cartLink(Request $request, SalesChannelContext $context) {
    /** @var Cart $cart */
    $cart = $this->cartService->getCart(
      $request->get('id'),
      $context
    );

    /** @var Session $session */
    $session = $request->getSession();
    $session->set(PlatformRequest::HEADER_CONTEXT_TOKEN, $cart->getToken());

    $this->cartService->setCart($cart);

    // return $this->forwardToRoute('frontend.checkout.cart.page');
    return $this->redirectToRoute('frontend.checkout.cart.page');
 }

Grüße!

1 „Gefällt mir“