REST API Multiple Orders

Thema wurde von Anonymous, 12. Juli 2020 erstellt.

  1. Anonymous

    Anonymous Aktives Mitglied

    Registriert seit:
    16. März 2016
    Beiträge:
    34
    Danke erhalten:
    4
    Danke vergeben:
    1
    Hallo,
    der Beispielcode für die Suche in Bestellungen lautet in der offizielle Doku für PHP:
    ((Link nur für registrierte Nutzer sichtbar.))

    $curl = curl_init();
    curl_setopt_array($curl, array(
    CURLOPT_URL => "(Link nur für registrierte Nutzer sichtbar.)",

    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\"search\":[\"\"]}",
    CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "authorization: Basic REPLACE_BASIC_AUTH",
    "content-type: application/json"
    ),
    ));

    $response = curl_exec($curl);

    und liefert das Ergenbnis:

    {
    "code": 0,
    "status": "error",
    "message": "StringType: Invalid argument value given (expected string got NULL): ",
    "request": {
    "method": "POST",
    "url": "(Link nur für registrierte Nutzer sichtbar.)",
    "path": "/api.php/v2/orders/search",
    "uri": {
    "root": "/api.php",
    "resource": "/v2/orders/search"
    }
    }
    }

    Auch ein sinnvoller Search-String ändert am Ergebnis bei mir nichts.
    Es wäre sehr nett, wenn mir jemand meinen Fehler aufzeigen könnte.

    Letztendlich möchte ich alle Bestellungen ab einer ID angezeigt bekommen, also in etwa so:

    CURLOPT_POSTFIELDS => "{\"search\":[\"{\"greater\": {\"orders.order_id\": \"510427\"}}\"]}",

    Danke für eure Hilfe!
     
  2. markus_wick

    markus_wick Erfahrener Benutzer

    Registriert seit:
    10. Oktober 2018
    Beiträge:
    966
    Danke erhalten:
    214
    Danke vergeben:
    153
    Evtl. ein Syntax Problem der Software mit der Du den REST_API Befehl per CURL schicken willst? Welche Software nutzt Du, welches OS?
    Klappt ein einfacher Search-Befehl, der nur Orders mit dem Status "Offen" anzeigt?

    "{\"search\":{\"match\": {\"orders.orders_status\": \"1\"}}}"

    Die eckigen Klammern bei Dir irritieren ich ein wenig, sind die in dem Befehlskontext korrekt?
     
  3. Anonymous

    Anonymous Aktives Mitglied

    Registriert seit:
    16. März 2016
    Beiträge:
    34
    Danke erhalten:
    4
    Danke vergeben:
    1
    Hallo Markus,

    Dankeschön.
    Das ist das PHP Beispielscript aus dem Handbuch. Von dort stammen auch die eckigen Klammern. Diese sind bei nur einer Suchbedingung sicher nicht nötig, sollten aber auch nicht schaden.
    Ausgeführt wird es unter Linux.
    Leider ändert Deine Codezeile nichts an der Fehlermeldung.
    Kannst du mir bitte ein Beispiel posten, welches bei Dir funktioniert?
     
  4. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    PHP:
    <?php

    $curl 
    curl_init();

    curl_setopt_array($curl,
                      [

                          
    CURLOPT_URL            => "https://www.gambio-shop.de/shop1/api.php/v2/orders/search",
                          
    CURLOPT_RETURNTRANSFER => true,
                          
    CURLOPT_ENCODING       => "",
                          
    CURLOPT_MAXREDIRS      => 10,
                          
    CURLOPT_TIMEOUT        => 30,
                          
    CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
                          
    CURLOPT_CUSTOMREQUEST  => "POST",
                          
    CURLOPT_POSTFIELDS     => '{
        "search": {
            "greater": {"orders.orders_id": "403535"}
        }
    }'
    ,
                          
    CURLOPT_HTTPHEADER     => [

                              
    "accept: application/json",
                              
    "authorization: Basic " base64_encode(sprintf('%s:%s''admin@shop.de''12345')),
                              
    "content-type: application/json"

                          
    ],

                      ]);

    $response curl_exec($curl);

    $err curl_error($curl);

    curl_close($curl);

    if (
    $err) {
        echo 
    "cURL Error #:" $err;
    } else {
        echo 
    $response;
    }
     
  5. Anonymous

    Anonymous Aktives Mitglied

    Registriert seit:
    16. März 2016
    Beiträge:
    34
    Danke erhalten:
    4
    Danke vergeben:
    1
    Hallo Moritz,

    Dankeschön!
    Das klappt :)