Sales-Channel-Api / Cart-Endpunkt: Produkt quantity lässt sich nicht ändern

Hallo Zusammen,

ich verzweifle gerade etwas an der Sales-Channel API. Ich habe einen neuen Warenkorb über die API angelegt und ihn auch mittels " POST  /sales-channel-api/v3/checkout/cart/product/{id}" befüllt. Wenn ich jetzt aber ein " PATCH  /sales-channel-api/v3/checkout/cart/line-item/{id}" mache, bekomme ich einfach nicht die quantitiy geändert. Der Wert “stackable” steht bei den Produkten auch auf true, der sollte aber standardmäßig false sein. Wenn er true ist, kann man die quantity nicht ändern - laut Doku. Deshalb wird es wahrscheinlich auch nicht gehen.

Jetzt ist die Frage: Wie geht es? Es muss doch möglich sein, den Warenkorb mit Produkten zu füllen und hinterher die Anzahl zu verändern? Oder gibt es eine nicht dokumentierte Route für die Sales-Channel-Api?

Danke!

dann setzt doch den Wert stackable=false in deinem PATCH-Request

@AlexGalax schrieb:

dann setzt doch den Wert stackable=false in deinem PATCH-Request

Das funktioniert auch nicht, habe ich natürlich schon probiert. Aber vielleicht mache ich was falsch: Ich teste mit Postman, nehme PATCH und verwende für die Parameter im Body “raw” und sende ein JSON (z.B. {“stackable”: “false”} ). Das ist doch so korrekt? Jedenfalls bekomme ich den Cart auch zurück…

Ich habe es gelöst. In der Doku steht zu stackable „Default: false, if set to true, quantity cannot be changed“. Es ist aber genau anders herum. Es muss true sein. Ich sende jetzt mit CURL erst ein stackable (bool) 1 und dann ein quantity (int) 2 und er ändert die Anzahl…

ah okay, gut zu wissen. Ich habe mich schon über die Semantik des Attributs gewundert.

Muss man dann echt zwei Requests machen, oder kann man beide in einem abfrühstücken?

Ich habe beide Parameter in einem gesendet. Ich nutze Curl via PHP, hier mal ein Beispiel für löschen und updaten:

 $ch = curl_init();

    if($quantity==0){

        $sc_url = $domain."/sales-channel-api/v3/checkout/cart/line-item/".$line_item_id;

        curl_setopt($ch, CURLOPT_URL, $sc_url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
        curl_setopt($ch, CURLOPT_HTTPHEADER,['sw-access-key:'.$sw_access_key.'','sw-context-token:'.$_COOKIE['session_token'].'']);
        

    } else {

        $sc_url = $domain."/sales-channel-api/v3/checkout/cart/line-item/".$line_item_id;

        curl_setopt($ch, CURLOPT_URL, $sc_url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
        curl_setopt($ch, CURLOPT_POSTFIELDS,
        json_encode(array("stackable"=>(bool)1,"quantity"=>(int)$quantity)));
        curl_setopt($ch, CURLOPT_HTTPHEADER,['sw-access-key:'.$sw_access_key.'','sw-context-token:'.$_COOKIE['session_token'].'','Content-Type: application/json-patch+json']);
        
    }

    curl_exec($ch);

    curl_close($ch);  

 

1 Like