Woocommerce mit REST API 2.0

  • Hi Leute,
    ich bin auf der Suche nach einem Beispielplugin das mit der Woocommerce REST API 2.0 auf Woocommerce zugreift und beispielsweise alle Produkte anzeigt, oder etwas ändert.
    Gerade die Authentifizierung mit dem von mir eingerichteten Schlüssel und die Übernahme der Daten ist mir noch nicht wirklich klar und dazu hätte ich gerne eine Beispiel. Leider konnte ich bei meiner Suche nur Beispiele fur alten API 1.0 finden.
    Es scheint sich da aber grundlegendes bei der v2.0 geändert zuhaben.

    Hat da jemand von Euch einen Tip oder sogar ein paar Zeilen "auf Lager"

    LG Andi

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Danke dafür, aber das hatte ich schon gefunden. Leider komme ich mit den Fragmenten dort nicht klar.
    Ich dachte, dass es evtl. irgendwo ein Plugin gibt, wo jemand soetwas in ein paar Zeilen schon einmal zusammengefasst hat. Die weiteren Funktionen kann ich mir dann selber erstellen, aber ich verstehe momentan noch nicht wie ich damt anzufangen habe :(

  • Danke dafür, aber das hatte ich schon gefunden. Leider komme ich mit den Fragmenten dort nicht klar.
    Ich dachte, dass es evtl. irgendwo ein Plugin gibt, wo jemand soetwas in ein paar Zeilen schon einmal zusammengefasst hat.

    so etwas?
    https://github.com/kloon/WooCommerce-REST-API-Client-Library

    pp etwas besser
    https://github.com/pixelpeter/lar…erce-api-client

    pp from Automattic
    https://github.com/woocommerce/wc-api-php

    Mit offenen Augen träumen

    Einmal editiert, zuletzt von r23 (25. Mai 2017 um 14:10)

  • Oh, danke. Die Links scheinen das zu beinhaltet was ich suche.
    Ich bin jetzt leider auf der Arbeit, aber heute nacht ist ja auch noch Zeit.
    Dann schaue ich mir das mal näher an.

    :)

  • Leider verweisen diese Links auf eine alte Version. Aber nach einigem Suchen habe ich nun im github was passendes gefunden.
    https://github.com/dominykasgel/w…import-products

    Aber ich muss da irgendetwas mit einem Composer machen.

    Kann mir mal bitte jemand erklären was das ist und wie ich das auf einem Windows-PC und Webspace ohne Konsolenzugriff benutzen kann?
    Mein Problem sind diese drei Zeilen:

    PHP
    require __DIR__ . '/vendor/autoload.php';
    
    
    use Automattic\WooCommerce\Client;
    use Automattic\WooCommerce\HttpClient\HttpClientException;

    der ganze Rest sieht klasse aus.

    Einmal editiert, zuletzt von andi_t (26. Mai 2017 um 13:52)

  • ... scheinbar muss ich diesen Composer dann auf dem Webspace installieren. Kann ich das irgendwie umgehen?
    Am liebsten würde ich mir nur die entsprechenden Dateien herunterladen und die in mein Pluginverzeichnis kopieren.
    Aber ich weiß nicht, wie ich an die entsprechenden Dateien herankomme :(
    Kann mir da bitte jemand helfen?

  • Leider verweisen diese Links auf eine alte Version.

    hüst...

    Dies ist das Original vom Hersteller => https://github.com/woocommerce/wc-api-php sogar mit Handbuch.

    und mit composer require pixelpeter/laravel5-woocommerce-api-client ^2.0 kann man sich eben
    https://github.com/pixelpeter/lar…erce-api-client

    installieren.


    Anleitung für Composer
    https://php-de.github.io/jumpto/composer/

    Mit offenen Augen träumen

  • hüst...

    Dies ist das Original vom Hersteller => https://github.com/woocommerce/wc-api-php sogar mit Handbuch.


    ja, und trotzdem ist es für die veraltete Version Woocommerce 2.6. Ich nutze WC 3.0 und da gibt es eine neue Version der API.


    mir wäre es lieber wenn ich auf diesen Composer verzichten könnte, da ich es unglücklich finde nur für diesen Zweck das Programm versuchen zu installieren und auch Probleme haben werde wenn ich das Plugin dann auf einem anderen Webspace installiere.
    Ich möchte das Ganze gerne als abgeschlossene Version haben.
    Kann ich das nicht irgendwie einfach umwandeln?

  • ja, und trotzdem ist es für die veraltete Version Woocommerce 2.6. Ich nutze WC 3.0 und da gibt es eine neue Version der API.

    grummel. Es wird ab Version Woocommerce 2.6 supportet es steht ausdrück or later die API version, default is v3 du hast optional die Möglichkeit die Version 2 oder im Beispiel Code die Version 1 einzuschalten.

    http://woocommerce.github.io/woocommerce-rest-api-docs/

    Mit offenen Augen träumen

  • ok, wie gesagt, ich habe da schon etwas gefunden mit dem ich weitrerkomme.
    Viel mehr ist aber der Composer mein Problem. Ich möchte dieses Programm nur ungerne installieren da ich damit größere Probleme erwarte.
    Bzgl. Umzug etc.
    Gibt es da keine andere Option das zu umgehen?

  • Auf https://woocommerce.github.io/woocommerce-re…s/#introduction siehst Du in der rechten Spalte Beispiele für die aktuelle v2 in verschiedenen Programmiersprachen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Gibt es da keine andere Option das zu umgehen?

    du kannst dies hier auch hier erhalten blog.r23.de/xing/api.zip es ist die aktuelle version von heute.

    Mit offenen Augen träumen

  • Danke, das hatte ich noch gar nicht gesehen.

    Hatte zwischenzeitlich zuviel anderes um die Ohren, sitze nun aber wieder an diesem Projekt.

    Anfangs hatte ich dann mit einem ähnlichen Plugin gearbeitet "Simple-wc-rest-client-master", habe nun aber das von Dir direkt in mein Plugin eingebaut.

    Wie ich es inzwischen schon an anderer Stelle beschrieb habe ich jetzt aber seit ein paar Wochen Probleme, dass die Variationen nicht mehr erstellt werden. Habe nun Dein Tool eingebaut und alles andere rausgeschmissen.

    Wenn ich nun Produkte erzeugen möchte:


    klappt das hervorragend, sobald ich dann aber die Varianten dazu erzeugen möchte


    gibt es einen Syntaxerror

    Code
    [B]Fatal error[/B]:  Uncaught  Automattic\WooCommerce\HttpClient\HttpClientException: Syntax error in  /www/htdocs/XXXXX/YYYYY/shop/wp-content/plugins/mein_plugin/vendor/automattic/woocommerce/src/WooCommerce/HttpClient/HttpClient.php:346 Stack trace: #0  /www/htdocs/XXXXX/YYYYY/shop/wp-content/plugins/mein_plugin/vendor/automattic/woocommerce/src/WooCommerce/HttpClient/HttpClient.php(385):  Automattic\WooCommerce\HttpClient\HttpClient->processResponse() #1  /www/htdocs/XXXXX/YYYYY/shop/wp-content/plugins/mein_plugin/vendor/automattic/woocommerce/src/WooCommerce/Client.php(56):   Automattic\WooCommerce\HttpClient\HttpClient->request('products/208/va...',  'POST', Array) #2  /www/htdocs/XXXXX/YYYYY/shop/wp-content/plugins/mein_plugin/mein_plugin_functions.php(128):  Automattic\WooCommerce\Client->post('products/208/va...', Array) #3  /www/htdocs/XXXXX/YYYYY/shop/wp-content/plugins/mein_pl  in [B]/www/htdocs/XXXXX/YYYYY/shop/wp-content/plugins/mein_plugin/vendor/automattic/woocommerce/src/WooCommerce/HttpClient/HttpClient.php[/B] on line [B]346[/B]

    den ich mir nicht wirklich erklären kann.
    Auch wenn ich die Varianten mittels der Angaben aus der Dokumentation


    anlegen möchte, klappt es nicht. Die Fehlermeldung bleibt bestehen.

    Gibt es da evtl. eine gute Idee, wie ich da am Besten nach dem Fehler suchen kann?
    Ich bin momentan mit meinem Latein am Ende...

    LG Andi

  • Mit den Codes kann man natürlich nichts anfangen, weil man nicht weiß welche Werte sich in $product befinden. Und man weiß nicht wie Dein API Aufruf aussieht. Ganz spontan würde ich aber einmal darauf tippen, dass das Produkt mit Type 'simple' anstatt 'variable' erstellt wurde.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • *oops*, die liefere ich doch sofort nach:
    hier der API-Aufruf:

    PHP
    $api_version="wc/v2";
    global $a_woocommerce;
    require __DIR__. '/vendor/autoload.php';
    use Automattic\WooCommerce\Client;
    use Automattic\WooCommerce\HttpClient\HttpClientException;        
    $a_woocommerce = new Client($shop, $schluessel, $geheimnis, ['wp_api' => true, 'version' => $api_version]);

    und hier der Rest zusammen:

    wie gesagt, bis hier hin ist alles schön, die Produkte erscheinen genauso wie ich es möchte im Backend, auch die Produkteigenschaften sind im Backend da, und stehen auch auf "Für Varianten verwendet": ja.

    Sobald ich dann folgendes aufrufe

    kommt wieder die obige Fehlermeldung.

  • OK, dann versuche ich es mal detaillierter anzugeben:
    Der Api-Aufruf:

    PHP
    $shop="xxxx";
    $schluessel="xxxx";
    $geheimnis="xxxx";
    $api_version="wc/v2";
    global $a_woocommerce;
    require __DIR__. '/vendor/autoload.php';
    use Automattic\WooCommerce\Client;
    use Automattic\WooCommerce\HttpClient\HttpClientException;        
    $a_woocommerce = new Client($shop, $schluessel, $geheimnis, ['wp_api' => true, 'version' => $api_version]);


    Die Produkterstellung:


    klappt hervorragend, und das System gibt mir folgende Werte zurück:

    Sobald ich dann aber die Varianten dazu erzeugen möchte

    gibt es den oben erwähnten Syntaxerror, den ich mir nicht wirklich erklären kann.

    Ich hoffe es ist mit diesen zusätzlichen Angaben verständlicher.

    LG Andi

  • Das einzige was ich aktuell als eventuelles Problem sehe ist

    $variation['attributes'][] = array(
    'id' => (int) $akt_attribute[XX_ATTRIBUT_NAME]['id'],
    'name' => XX_ATTRIBUT_NAME,
    'option' => $akt_attribute[XX_ATTRIBUT_NAME]['terms'][$i]
    );

    Beim Erstellen der Variante wird nur id und option verwendet. Beides muss bereits existieren ansonsten muss das Produkt Attribute vorher erstellt werden.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.


  • Beim Erstellen der Variante wird nur id und option verwendet. Beides muss bereits existieren ansonsten muss das Produkt Attribute vorher erstellt werden.


    ne, habe eben nochmal den "name" gegelassen und es kommt immer noch der Fehler.
    Die Attribute werden ja schon vorher erzeugt:
    mittels

    PHP
    $akt_attribute=add_attribute();// Attribute zu Woocommerce hinzufuegen


    und


    und

    PHP
    function get_attribute() 
        {
            $produkt_attribute = array();
            $anzahl_varianten=6;
            for ($i=0;$i<$anzahl_varianten;$i++)
                {
                    $produkt_attribute[XX_ATTRIBUT_NAME]['terms'][] = get_option('xx_name_'.$i);
                }            
            return $produkt_attribute;
        }

    ich finde einfach keinen Grund warum das nicht läuft :(

    LG Andi

  • ich finde einfach keinen Grund warum das nicht läuft :(

    LG Andi

    du kannst dir einfach ansehen, was du zurück bekommst.

    https://github.com/woocommerce/wc…/HttpClient.php

    Zeile 373

    PHP
    if (0 === strpos(bin2hex($body), 'efbbbf')) {
               $body = substr($body, 3);
            }
            $parsedResponse = \json_decode($body, true);
            // Test if return a valid JSON.
            if (JSON_ERROR_NONE !== json_last_error()) {
                $message = function_exists('json_last_error_msg') ? json_last_error_msg() : 'Invalid JSON returned';
                throw new HttpClientException($message, $this->response->getCode(), $this->request, $this->response);
            }
            $this->lookForErrors($parsedResponse);

    hier einfach

    [code=php]
    <?php
    $data = [
    'regular_price' => '9.00',
    'image' => [
    'id' => 423
    ],
    'attributes' => [
    [
    'id' => 9,
    'option' => 'Black'
    ]
    ]
    ];

    print_r($woocommerce->post('products/22/variations', $data));
    ?>

    mit deinen Daten probieren.

    Anleitung
    http://woocommerce.github.io/woocommerce-re…oduct-variation


    Wenn du PHP 7.08 verwendest - kannst du ein PHP Bug haben - Zitat aus der Changelog von PHP
    http://php.net/ChangeLog-7.php

    Fixed bug #72275 (Integer Overflow in json_encode()/json_decode()/ json_utf8_to_utf16()).

    https://bugs.php.net/bug.php?id=72275


    Viel Glück

    ralf

    Mit offenen Augen träumen

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!