chapter2chapter2 MemberComments: 8 Received thanks: 1 Member since: May 2013 edited October 2020

Hallo Liebe Showare-Community,

ich arbeite an einem Import-Tool, dass eine CSV direkt über die API-Schnittstelle in den Shop einspeist.

Final möchte ich der Suche eine Kategorie Hierarchie übergeben (z.B. Rohrsysteme => Rohre).
Je nach Struktur sollen fehlende Kategorien automatisch angelegt und die passende Kategorie-ID als Antwort ausgegeben werden.

Dazu muss ich unter anderem die Produktkategorien finden bzw. neu anlegen. Aktuell liefert mir die API aber stets den vollständigen Kategoriebaum zurück - wo liegt das Problem?

function doShopwareApiRequest($uri, $method = 'post', $body = null)
{
    // Ja, globals sind nicht optiomal. Der Zweck sollte aber klar sein
	global $base, $client, $accessToken;

	$uri = '/' . ltrim($uri, '/');

	if ($body !== null && !is_string($body)) {
		$body = json_encode($body);

		// Malformed json data
		if ($body === false) {
			return null;
		}
	}

	$request = new \GuzzleHttp\Psr7\Request(
		$method,
		$base . $uri,
		[
			'Authorization' => 'Bearer ' . $accessToken,
			'Accept' => '*/*'
		],
		$body,
	);
	$response = $client->send($request);
	$data = json_decode($response->getBody()->getContents(), true);

	return $data;
}

Nach diesem Teil suche ich (erst mal)

$searchData = [
	'filter' => [
		[
			'type' => 'contains',
			'field' => 'name',
			'value' => 'Rohr',
		]
	],
];

Schließlich wird die Anfrage gesendet:

doShopwareApiRequest('/api/v3/search/category', 'post', $searchData);

 

Answers

  • chapter2chapter2 MemberComments: 8 Received thanks: 1 edited October 2020 Member since: May 2013

    Ich habe mir die Mühe gemacht und bin den API-Teil per Debug durchgangen. Der Request-Body in \GuzzleHttp\Psr7\Request landet nach dem Beispiel oben nicht im ParameterBag.

    Sobald ich auf $client->post() wechsel, kommt das erwartete Ergebnis.  Außerdem fehlt in diesem Zusammenhang in der Shopware-Doku jeder Hinweis auf den notwendigen 'form_params' - Schlüssel.

    $response = $client->post($base . $uri, [
    	'form_params' => $body, // raw array data
    	'headers' => [
    		'Authorization' => 'Bearer ' . $accessToken,
    		'Accept' => '*/*'
    	]
    ]);

     

Sign In or Register to comment.