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:
    982
    Danke erhalten:
    222
    Danke vergeben:
    156
    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.694
    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 :)