Denkanstoß, wie Filter an api/order übergeben?

Hey.

Ich habe mir mit Hilfe von 

use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use kamermans\OAuth2\GrantType\ClientCredentials;
use kamermans\OAuth2\OAuth2Middleware;

ein Sccript gebastelt mit dessen Hilfe ich Bestellungen abfragen kann. Aber egal wie ich es anstelle, ich bekomme den Filter nicht übergeben. Ich habe entweder eine Exception oder alle Bestellungen:
 

{"errors": [
    {
        "code": "c1051bb4-d103-4f74-8988-acbcafc7fdc3",
        "status":"400",
        "detail":"Dieser Wert sollte nicht leer sein.", 
        (truncated...)

Was wird hier mit „detail“ angesprochen?

Mein Filter (Versuch) sieht so aus:

$res = $client->post('order', [
	'json' => [
		'filter' => [
			'type' => 'range',
			'field' => 'order.orderNumber',
			'parameters' => [
				'gt' => '10079' // "> als"
			]
		]
	]
]);

Ich versuche quasi ab einer bestimmten Bestellung die neueren zu bekommen.

Weiß jemand Rat oder kann mich in die richtige Richtung schubsen?

LG

So, da die Doku extrem löchrig ist und alles nur oberflächlich abfackelt hab ich nun nach vielem try&error und Suchmaschinen-Hilfe eine Lösung gefunden.
Es gibt auch einfach kein working example was einfach mal alles viel einfach und verständlicher machen würde.

Ziel war es die letzten Bestellungen via API zu erhalten. Mein erster Ansatz war mittels Filter ab einer bestimmten Bestellnummer die „neuen“ zu bekommen.
Geht einfach nicht. Es wirft nur Exceptions, wird ein Bug sein.

Der andere Ansatz war dann eine umgedrehte Sortierung mit einem Limit. Da alles via Cronjob läuft ist das kein Problem.

use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use kamermans\OAuth2\GrantType\ClientCredentials;
use kamermans\OAuth2\OAuth2Middleware;

$reauth_client = new Client([
	'base_uri' => 'https://domain.tld/api/oauth/token',
]);
$reauth_config = [
	'client_id' => 'CLIENT_ID_==>_INTEGRATION',
	'client_secret' => 'CLIENT_SECRET_==>_INTEGRATION',
];

$grant_type = new ClientCredentials($reauth_client, $reauth_config);
$oauth = new OAuth2Middleware($grant_type);
$stack = HandlerStack::create();
$stack->push($oauth);


$client = new Client([
	'base_uri' => 'https://domain.tld/api/v3/',
	'handler' => $stack,
	'auth' => 'oauth',
	'headers' => [
		'accept' => 'application/json',
	]
]);

// immer die letzten 5 holen + Zahlart und Status
$res = $client->post('search/order', [
	'json' => [
		'limit' => 5,
		'sort' => '-orderNumber',
		'associations'=> [
			'lineItems' => [],
			'transactions' => [
				'associations' => [
					'paymentMethod' => []
				]
			]
		]
	]
]);

$results = json_decode($res->getBody(), true)['data'];

echo '';
print_r($results);
echo '';

Das print_r wirft dann folgendes aus:

Array
(
    [0] => Array
        (
            [orderNumber] => 10247
            [currencyId] => b7d2554b0ce847cd82f3ac9bd1c0dfca
            [currencyFactor] => 1
            [salesChannelId] => a749551212824b61b2421e43c60d9d19
            [billingAddressId] => 9af4e57f149e411c8a9a4a5f0c822fe6
            [orderDateTime] => 2020-10-08T12:01:32.060+00:00
            [orderDate] => 2020-10-08T00:00:00.000+00:00
            [price] => Array
                (
                    [netPrice] => 40,39
                    [totalPrice] => 46,86
                    [calculatedTaxes] => Array
                        (
                            [0] => Array
                                (
                                    [tax] => 6,47
                                    [taxRate] => 16
                                    [price] => 46,869999996538
                                    [extensions] => Array
                                        (
                                        )

                                    [apiAlias] => cart_tax_calculated
                                )

                        )

                    [taxRules] => Array
                        (
                            [0] => Array
                                (
                                    [taxRate] => 16
                                    [percentage] => 100
                                    [extensions] => Array
                                        (
                                        )

                                    [apiAlias] => cart_tax_rule
                                )

                        )

                    [positionPrice] => 41,96
                    [taxStatus] => gross
                    [extensions] => Array
                        (
                        )

                    [apiAlias] => cart_price
                )

            [amountTotal] => 46,86
            [amountNet] => 40,39
            [positionPrice] => 41,96
            [taxStatus] => gross
            [shippingCosts] => Array
.
.

 

Ggf hilft das jmd anderem. Entweder als Lösung oder Ansatz.

 

Hallo optimondo,

ich bin erst ganz am Anfang mit der API. 
Mit dem Bereich Bestellungen werde ich mich vermutlich erst in 3-5 Wochen beschäftigen (Muss erst mal Kategorien und Artikel in den Shop bekommen bevor die erste Bestellung kommt :slight_smile: )

Im Shopware5 (werden wir sicherlich auch mit der SW6 API machen) filtern wir nach dem Bestellstatus (z.B. ‘Offen’).Das ist lt Doku auch relativ einfach möglich. Nach dem wir die Bestellung dann erfolgreich in das ERP übernommen haben, ändern wir den Status der Bestellung (z.B ‘In Bearbeitung’) 

Das mal als Denkanstoß für dich…

Nesh

Unabhängig von der Tatsache, dass die Filter unglaublich fehlerhaft sind, wäre es toll wenn du das JSON Payload postest was tatsächlich gesendet wird… habe bereits diverse Filter für die orders im Einsatz, kenne allerdings nicht dein payload, da wir spring nutzen für die api calls …

@nesh schrieb:

Im Shopware5 (werden wir sicherlich auch mit der SW6 API machen) filtern wir nach dem Bestellstatus (z.B. ‚Offen‘)

Das ist korrekt, mache ich ja auch so. Das fruchtet aber in einem SW6 nicht, oder je nach Mond-Stellung ab und zu. Wie @mynote schrieb, ist das filtern recht buggy. Ich hab nie wirklich das erhalten was ich wollte.

Meine Lösung reicht mir aus und bringt das gewünschte Ergebnis.