Store API - Produkt in Warenkorb legen

Hallo,

ich habe versuche einen Artikel in den Warenkorb zu legen und habe mich exakt an folgendes gehalten:
Add items to the cart | Store API > XMLHttpRequest

Als response bekomme ich auch positives feedback zurück. Allerdings erscheint der Artikel nicht im Warenkorb.

Ich habe bestimmt nur einen kleinen Denkfehler. Wäre um jeden Hinweis dankbar!

Ich denke, es liegt an dem fehlenden Token. Der Token wird ja verwendet um die Cart mit der User Sessions zu „verbinden“.

Hi, den Context-Token übergebe ich. Jedoch tut sich im cart selber trotzdem nichts.

Du müsstest dich als erstes als Kunden einloggen mittels store-api/account/login.
In der Response bekommst du ein contextToken zurück.
Dann machst du ein Request durch die URL store-api/checkout/cart/line-item. Im Header übergibst du als sw-context-token den contextToken den du zuvor erhalten hast. Dann werden die Items der Cart hinzugefügt. Taucht auch im Frontend auf. Hab ich getestet.
Problem könnte nur sein, dass der User seine Cart verliert, wenn er sich neu einloggt. Das müsste man testen. Hier ist noch ein alter Thread dazu: How to connect an existing customer with a cart created with sales channel API? - #3 von SorinSologics2019

Also ohne Login geht das nicht?
Einem Neukunden kann also nichts via API in den Warenkorb gelegt werden?
Denn auch ohne Logged-in user bekomme ich ja einen context-token.

Es muss doch auch ohne login möglich sein?

Ich habe auf die Schnelle nichts dafür in den API docs gefunden.

Du könntest aber auch eine eigene Route dafür bauen, technisch möglich ist es auf jeden Fall.

Ich befürchte, das übersteigt meine Fähigkeiten. Shopware ist eigentlich nicht mein gewohntes Umfeld.
Aber danke trotzdem.

P.s.: Das geht eingelogged auch nicht.

Hier mal mein Script:

             const data = JSON.stringify({
                items: [
                  {
                    type: 'product',
                    id: 'e7b6a5682d2c4027bd93b62ddf8d5c25',
                    referencedId: 'e7b6a5682d2c4027bd93b62ddf8d5c25',
                    quantity: 1,
                    removable: true
                  }
                ],
                //apiAlias: 'cart'
              });

              const xhr = new XMLHttpRequest();
              xhr.withCredentials = true;

              xhr.addEventListener('readystatechange', function () {
                if (this.readyState === this.DONE) {
                  // console.log(this.responseText);
                  
                } else {
                 // console.log(this.responseText);
                }
              });

              xhr.open('POST', 'https://hxxxxx.shop/store-api/checkout/cart/line-item');
              xhr.setRequestHeader('Content-Type', 'application/json');
              xhr.setRequestHeader('Accept', 'application/json');
              xhr.setRequestHeader('sw-access-key', 'XXXXX');
              xhr.setRequestHeader('sw-context-token', XXXXX);
         
              xhr.send(data);```

Zur Info, so geht es:

                        var result = this.responseText;
                        var jsonResponse = JSON.parse(result);
                        var toke = jsonResponse["token"];
                        let formData = new FormData();

                        formData.append('_csrf_token', 'xxx.xxxx.xxxxxxxxx');
                        formData.append('lineItems[e7b6a5682d2c4027bd93b62ddf8d5c25][quantity]', 1);
                        formData.append('redirectTo', 'frontend.cart.offcanvas');
                        formData.append('lineItems[e7b6a5682d2c4027bd93b62ddf8d5c25][id]', 'e7b6a5682d2c4027bd93b62ddf8d5c25');
                        formData.append('lineItems[e7b6a5682d2c4027bd93b62ddf8d5c25][type]', 'product');
                        formData.append('lineItems[e7b6a5682d2c4027bd93b62ddf8d5c25][referencedId]', 'e7b6a5682d2c4027bd93b62ddf8d5c25');
                        formData.append('lineItems[e7b6a5682d2c4027bd93b62ddf8d5c25][stackable]', 1);
                        formData.append('lineItems[e7b6a5682d2c4027bd93b62ddf8d5c25][removable]', 1);
                        formData.append('product-name', 'Werkszeugnis 2.2/3.1');
                        formData.append('brand-name', '');
                        

                        const xhr = new XMLHttpRequest();
                        xhr.withCredentials = true;

                        xhr.addEventListener('readystatechange', function () {
                          if (this.readyState === this.DONE) {
                            // console.log(this.responseText);
                            
                          } else {
                           // console.log(this.responseText);
                          }
                        });

                        xhr.open('POST', 'https://domain.shop/en/checkout/line-item/add');
                        // xhr.setRequestHeader('Content-Type', 'multipart/form-data');
                        // xhr.setRequestHeader('Accept', '*/*');
                        xhr.setRequestHeader('sw-access-key', 'xxxxx');
                        xhr.setRequestHeader('sw-context-token', toke);
                        xhr.send(formData);

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.