shippingCosts in API-Post erzeugt Fehler

Versuche über die API (SW 6.7.3.0) eine Bestellung zu erzeugen. Bei der Übergabe der Versandkosten (shippingCosts) habe ich jetzt jedoch große Fragezeichen im Gesicht. Oder ich bin total blind.

Mein Script:

$data['shippingCosts'] = [
  'unitPrice' => 0,
  'totalPrice' => 0,
  'quantity' => 1,

  'calculatedTaxes' => [ 'price' => 0, 'tax' => 0, 'taxRate' => 19 ],
  'taxRules' => [ 'taxRate' => 19, 'percentage' => 100 ] 
];

Fehlermeldung von der API:

Argument #1 ($tax) must be of type array, int given
[file] => .../shopware/core/Framework/DataAbstractionLayer/FieldSerializer/CartPriceFieldSerializer.php
[line] => 49

Auszug aus dieser Funktion:

$taxRules = array_map(
  fn (array $tax) => new TaxRule( <-- line 49
    (float) $tax['taxRate'],
    (float) $tax['percentage']
  ),
 $decoded['taxRules']
);

Ich verstehe die Fehlermeldung nicht. Es wird doch ein Array übergeben.

Ne .0 Version…vielleicht klappt es wieder mit der gerade erschienenen 6.7.4.0?

Hast du evtl. ein array drum herum vergessen? Shopware erwartet hier ein array an Regeln.

‚taxRules‘ => [[ ‚taxRate‘ => 19, ‚percentage‘ => 100 ]]

Viele Grüße

Also nach meiner Ansicht ist das schon ein Array:

'taxRules' => [ 'taxRate' => 19, 'percentage' => 100 ] 

Auch das dopplet gemoppeltes Array

'taxRules' => [ [ 'taxRate' => 19, 'percentage' => 100 ] ] 

zeigt exakt die selbe Fehlermeldung.

Selbe Zeile ist übrigens auch beim Preis enthalten und da gibt es keine Fehlermeldung. :thinking:

$order['shippingCosts'] = 
['unitPrice'         => $value['DELCOST'],
 'totalPrice'        => $value['DELCOST'],
 'quantity'          => 1,
 'calculatedTaxes'   => [['tax'       => $value['DELCOST'],
                          'taxRate'   => $value['DELVAT'],
                          'price'     => $value['DELCOST'],
                        ]],
 'taxRules'          => [['taxRate'   => $value['DELVAT'],
                          'percentage'=> 100,
                        ]],
];

So hat das bisher funktioniert.

Möglich, dass es bisher mal so war, aber aktuell ist das sehr komisch.

Kleiner Test:

$data['price'] = [
  'netPrice' => 100.84,
  'totalPrice' => 120,
  'positionPrice' => 120,
  'rawTotal' => 120,
  'taxStatus' => 'gross',
  
  'calculatedTaxes' => [[ 'tax' => 19.16, 'taxRate' => 19 ]],
  'taxRules' => [[ 'taxRate' => 19, 'percentage' => 100 ]] 
];

Fehler:

Warning: Undefined array key „price“

$data['shippingCosts'] = [
  'unitPrice' => 0,
  'totalPrice' => 0,
  'quantity' => 1,

  'calculatedTaxes' => [[ 'price' => 0, 'tax' => 0, 'taxRate' => 19 ]],
  'taxRules' => [[ 'taxRate' => 19, 'percentage' => 100 ]]
];

Fehler:

Argument #1 ($tax) must be of type array, int given

Also ich kann das nicht nachvollziehen.

Nachtrag:

Habe soeben auf 6.7.4.0 aktualisiert - Fehlermeldung bliebt unverändert :thinking:

Hm, dann schau mal über den Admin beim Erstellen einer Order, ob sich dort im Request etwas geändert hat. Die Doku sagt auch nichts Neues dazu (Create a new Order resources. | Admin API)

Mit der Doku bau ich ja meine API-Anwenung :slight_smile: Ist aber an dieser Stelle nicht wirklich hilfreich (das kenne ich schon).

taxRules object
Pricing based on multiple taxes.

Keine weiteren Angaben. Laut Doku ist das Feld nicht mal ein Pflichtfeld. Die API will aber dennoch diesen Wert :thinking:

gibts dazu schon was neues? ich hänge da auch gerade und kann keine order erstellen.

Habe das aus zeitgründen nicht mehr verfolgt. Werde mich damit aber noch mal beschäftigen müssen.

danke

einerseits sollte es gar nicht required sein, aber wenn ich es nicht mitschicke, kommt fehler, dass es fehlt

und wenn ich es mitschicke, kommt fehler, dass es ein array sein muss…

und auch das beispiel aus der doku mit der ganz simplen, leeren bestellung funktioniert auch nicht

hat wer ein beispiel-payload mit einer “leeren” minimal-bestellung (das man danach ev.über die API befüllen kann)?