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: