Shopware 6 API PHP Client

Hallo alle zusammen,

so, ich bin jetzt ein wenig schlauer bzgl. oauth2 Authentifzierung. Nachdem man einen gültigen Token hat, kann man mit nur sehr wenigen Zeilen Code alle GET-Abfragen durchführen - Anbei ein Beispiel für den Abruf von Produktdaten über Curl:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://meinserver.de/api/v1/product/f67394222c5f4556a3859d1d03712d90');
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer $token"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$myApiData = curl_exec($ch);
curl_close($ch);
$var = json_decode($myApiData);
print_r($var);

 

Das funktioniert soweit sehr gut. Leider hänge ich jetzt aber noch an den Abfragen POST, PATCH und DELETE. Fangen wir mal bei dem vermeintlich einfachen DELETE an. Den obigen Code wollte ich einfach mit einem curl_setopt($ch, CURLOPT_CUSTOMREQUEST, „DELETE“); erweitern.

Dabei erhalten ich jedoch folgende Fehlermeldung:

 [code] =\> 0 [status] =\> 500 [title] =\> Internal Server Error 

 [detail] =\> Argument 1 passed to Shopware\Core\Framework\Uuid\Uuid::fromHexToBytes() must be of the type string, null given, called in /var/www/html/vendor/shopware/platform/src/Core/Framework/DataAbstractionLayer/VersionManager.php on line 466 )

Vielleicht hat einer Idee, woran es liegt? In welcher Form muss der Code noch erweitert / angepasst werden?

Viele Grüße

canetti

 

Wie übergibtst du denn die uuid? Liest sich ja so als ob die fehlt.

Hallo Moritz,

was meinst Du bitte mit uuid? Die Produkt-ID übergebe ich doch mit der URL. Schau mal, so sieht das bei mir Im Postman aus - leider mit der gleichen Fehlermeldung.

Wo soll ich da welche uuid platzieren?

Viele Grüße

canetti

 

Da der Admin ja auch die API nutzt, kannst du auch einfach ein Produkt im neuen Admin löschen und dir den Request in der Entwickler-Konsole ansehen. 

Entweder ist das in deinem Installationsstand defekt oder der Request ist falsch. Im aktuellen Master kann ich das sowohl im Admin, als auch per Postman.

Hallo Moritz,

in die Entwickler-Konsole komme ich doch nur per SSH-Zugang, oder? Den habe ich leider nicht, da ich ja eine “Fremdinstallation” von friendsofshopware.de nutze. Die Produkte können aber normal über das Backend gelöscht werden. Ich glaube auch nicht, dass es an einer fehlerhaften Installation liegt, da ich die identische Fehlermeldung auch bei einem anderen Testzugang (anderer Server) erhalte. Daher gehe ich davon aus, dass meine DELETE-Anweisung per CURL bzw. Postman  fehlerhaft ist… ;-(

Viele Grüße

canetti

Du kannst einfach bspw. im Chrome-Browser die Entwickler-Konsole öffnen (F12) und dort dann im Netzwerktab schauen, was der Admin an die API schickt. Dazu brauchst du keinen Server-Zugang.

Moin @canetti2‍,

bei uns würdest du auf Nachfrage SSH Zugansdaten zu deiner Shopware 6 Umgebung bekommen, wenn diese bei uns eingerichtet wurde (wie eingangs erwähnt).

Viele Grüße

Hallo [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski “Moritz Naczenski”)‍,

sitze gerade daran, die Sales Channel API in einer CMS Lösung zu integrieren. Allerdings stellt sich folgendes Problem:

Habe shopware/production lokal aufgesetzt (plattform brauchen wir nicht, da wir nur shopware/core verwenden werden. Storefront komplett im CMS, Admin wird komplett durch ERP / PIM ersetzt). Über /sales-channel-api/v1/_info/openapi3.json?format=yaml hole ich mir die Specs. Dann habe ich mir den Swagger Codegen aufgesetzt und mit ein Client SDK generiert. Das liegt nun in einem Repo und wird im CMS mittels Composer required.

Nun wird’s problematisch: Bspw. die Methode getProduct(‘MEINE_ID’) liefert problemlos das entsprechende Product, allerdings bekomme ich bei getProductList() sowie auch anderen getXxxList() einen Fehler ausgegeben:

Class ‘’ not found

Exception Code0
Exception TypeError
Thrown in FilePackages/Libraries/jalieb/sw-client-sdk/lib/ObjectSerializer.phpLine293

Code siehe hier: https://github.com/jalieb/sw-client-sdk/blob/master/lib/ObjectSerializer.php#L293

So wie ich das sehe, wird hier der discriminator / returnType einfach nicht gesetzt?

Schließlich habe ich die openapi3.json geprüft. Hier werden mehrere Fehler gefunden: https://validator.swagger.io/validator/debug?url=http%3A%2F%2F167.172.97.215%2Fswagger.json

BTW: Ich bin auf https://github.com/shopware/production/tree/6.1

Kannst Du uns hier weiterhelfen? Wäre sicherlich auch für @canetti2 interessant.

Viele Grüße & vielen, vielen Dank vorab!

EDIT: Das Problem tritt auch auf, wenn ich mir die Relationships holen möchte, also z.B. 

 $categoryApi-\>getCategory('77b959cf66de4c1590c7f9b7da3982f3')-\>getData()-\>getRelationships() 

Hier bekomme ich null zurückgegeben.