API: Gastbestellung Zahlung abschließen: abgebrochen weil nicht logged in

Hallo,

wir legen Bestellungen über die Headless API an mittels Gastbestellung.

Zuerst setzen wir für den Context die Zahlungsart-ID für PayPal

/sales-channel-api/v1/context

mit folgendem Request-Body:  {“paymentMethodId”: methodId}

und schließen danach die Order ab mit dem Customer im Request-Body

/sales-channel-api/v1/checkout/guest-order

funktioniert auch einwandfrei, die Bestellung wird in Shopware angelegt.

danach möchten wir natürlich die Zahlung abschließen wie in der Doku beschrieben:

/sales-channel-api/v1/checkout/order/${orderId}/pay

da bekommen wir aber folgenden Fehler zurück:

An was liegt das? Wieso muss der Customer bei einer Gastbestellung eingeloggt sein?

Bitte um Hilfe von Shopware, wenn schon die Doku dazu nix hergibt…!

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍

Hallo Flo,

beim Erstellen der Gastbestellung bekommst du ja einen neuen Token zurück. Benutzt du diesen neuen Token auch für den Request zum Anstoßen der Zahlung?

Viele Grüße aus Schöppingen

cool Michael Telgmann

[@Michael Telgmann](http://forum.shopware.com/profile/17553/Michael Telgmann „Michael Telgmann“)‍

man bekommt einen neuen Token? Das steht aber nirgends in der Doku… da steht nur, dass man das Order-Objekt bekommt…

Create a guest order
POST  /sales-channel-api/v1/checkout/guest-order
Header : sw-context-token is required
Parameter : For the parameter, please have a look at the customer registration. The guest parameter is always set to true.
Response : If successful, the order will be returned.

beim Zahlen steht in der Doku auch nix von einem neuen Context … da steht nur, dass man halt die neue Order-ID nutzen muss

Start the payment process for an order
POST  /sales-channel-api/v1/checkout/order/{orderId}/pay
Header:  sw-context-token is required
Parameter:  If finishUrl is set, the customer will be redirected to this URL after the payment process is completed. 
Response:  The response depends on the type of the payment processor used. A payment processor can define if the user needs to be redirected to an external payment gateway. If that’s the case, you get a response which includes a paymentUrl. This is the URL of the external payment gateway where you have to redirect the user to. If the payment process is completed or the payment processor use an external payment gateway, you will receive an empty response.

 

auch im Code-Beispiel ist nichts von einem Context-Token beschrieben, nur das hier

function guestOrder(customer) {
        const url = `${baseUrl}/sales-channel-api/v1/checkout/guest-order`;
        const body = JSON.stringify(customer);
        return fetch(url, { method: 'POST', headers, body })
            .then((resp) => resp.json())
            .then(({ data }) => data);
    }

const order = await guestOrder(customer);
console.log('Order', order);

liegt vielleicht auch daran, dass der ganze Zahlprozess nicht im Codebeispiel enthalten ist, was ja an sich auch schon blöd ist, wenn in einem „Beispiel“ das wichtigste fehlt…