Problem bei GET API Call

Guten Tag,

ich teste mich derzeit etwas an die API ran.

 

Der normale abruf für artikel und bestellungen funktioniert

also : /api/orders , /api/articles

lediglich die abfrage eines artikels bzw. einer bestellung funktioniert nicht ( /api/orders/1 , /api/articles/1 ).

hier erhalte ich den fehler

 {"success":false,"message":"Resource not found"}

 

Ich würde mich freuen wenn jemand einen tipp hat.

Ich habe es per PHP versucht mit dem Code aus der Doku, sowie per Browser, in beiden fällen das gleiche problem.

Hast du denn eine Bestellung bzw. einen Artikel mit der ID 1 in deiner Datenbank? Es geht nicht um die Artikelnummer, sondern um die DatenbankID… wenn du nach der Artikelnummer suchst, brauchst du noch den Parameter ?useNumberAsId=true

Hallo danke erstmal für deine Antwort 

ja die ID ist vorhanden, wenn ich mit usenumberasid suche kommt das gleiche raus also der gleiche fehler

Übergibst du die ShopID? Mir ist so in erinnerung dass man die übergeben muss. Und bist du dir sicher, dass die Zahl kein String ist? Poste mal deinen Code.

Shopid übergebe ich derzeit nicht Code stelle ich noch rein prüfe erstmal das mit dem String 

Also mein code ist wie folgt

 

class ApiClient
{
    const METHOD_GET = 'GET';
    const METHOD_PUT = 'PUT';
    const METHOD_POST = 'POST';
    const METHOD_DELETE = 'DELETE';
    protected $validMethods = [
        self::METHOD_GET,
        self::METHOD_PUT,
        self::METHOD_POST,
        self::METHOD_DELETE,
    ];
    protected $apiUrl;
    protected $cURL;

    public function __construct($apiUrl, $username, $apiKey)
    {
        $this->apiUrl = rtrim($apiUrl, '/') . '/';
        //Initializes the cURL instance
        $this->cURL = curl_init();
        curl_setopt($this->cURL, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->cURL, CURLOPT_FOLLOWLOCATION, false);
        curl_setopt($this->cURL, CURLOPT_USERAGENT, 'Shopware ApiClient');
        curl_setopt($this->cURL, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
        curl_setopt($this->cURL, CURLOPT_USERPWD, $username . ':' . $apiKey);
        curl_setopt(
            $this->cURL,
            CURLOPT_HTTPHEADER,
            ['Content-Type: application/json; charset=utf-8']
        );
    }

    public function call($url, $method = self::METHOD_GET, $data = [], $params = [])
    {
        if (!in_array($method, $this->validMethods)) {
            throw new Exception('Invalid HTTP-Methode: ' . $method);
        }
        $queryString = '';
        if (!empty($params)) {
            $queryString = http_build_query($params);
        }
        $url = rtrim($url, '?') . '?';
        $url = $this->apiUrl . $url . $queryString;
        $dataString = json_encode($data);
        curl_setopt($this->cURL, CURLOPT_URL, $url);
        curl_setopt($this->cURL, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($this->cURL, CURLOPT_POSTFIELDS, $dataString);
        $result = curl_exec($this->cURL);
        $httpCode = curl_getinfo($this->cURL, CURLINFO_HTTP_CODE);

        return $this->prepareResponse($result, $httpCode);
    }

    public function get($url, $params = [])
    {
        return $this->call($url, self::METHOD_GET, [], $params);
    }

    public function post($url, $data = [], $params = [])
    {
        return $this->call($url, self::METHOD_POST, $data, $params);
    }

    public function put($url, $data = [], $params = [])
    {
        return $this->call($url, self::METHOD_PUT, $data, $params);
    }

    public function delete($url, $params = [])
    {
        return $this->call($url, self::METHOD_DELETE, [], $params);
    }

    protected function prepareResponse($result, $httpCode)
    {
        echo "HTTP: $httpCode";
        if (null === $decodedResult = json_decode($result, true)) {
            $jsonErrors = [
                JSON_ERROR_NONE => 'No error occurred',
                JSON_ERROR_DEPTH => 'The maximum stack depth has been reached',
                JSON_ERROR_CTRL_CHAR => 'Control character issue, maybe wrong encoded',
                JSON_ERROR_SYNTAX => 'Syntaxerror',
            ];
            echo 'Could not decode json';
            echo 'json_last_error: ' . $jsonErrors[json_last_error()];
            echo 'Raw:';
            echo '' . print_r($result, true) . '';

            return;
        }
        if (!isset($decodedResult['success'])) {
            echo 'Invalid Response';

            return;
        }
        if (!$decodedResult['success']) {
            echo 'No Success';
            echo '' . $decodedResult['message'] . '';
            if (array_key_exists('errors', $decodedResult) && is_array($decodedResult['errors'])) {
                echo '' . join('', $decodedResult['errors']) . '';
            }

            return;
        }
        echo 'Success';
        if (isset($decodedResult['data'])) {
            echo '' . print_r($decodedResult['data'], true) . '';
        }

        return $decodedResult;
    }
}

$client = new ApiClient(
    //URL of shopware REST server
    'https://www.xxxx.de/api',
    //Username
    'xxxx',
    //User's API-Key
    'xxxx'
);


$client->get('articles/570');
echo "";
var_dump($client);

wenn ich die shopid übergebe bleibt der fehler.

HTTP: 404
No Success

Resource not found

object(ApiClient)#1 (3) {
  ["validMethods":protected]=>
  array(4) {
    [0]=>
    string(3) "GET"
    [1]=>
    string(3) "PUT"
    [2]=>
    string(4) "POST"
    [3]=>
    string(6) "DELETE"
  }
  ["apiUrl":protected]=>
  string(41) "https://www.xxxx.de/api/articles/"
  ["cURL":protected]=>
  resource(2) of type (curl)
}

 

was passiert wenn du die articles-api über den browser abfragst?

EDIT: sorry, grade wieder den ersten Eintrag gelesen…  Blush

 

$result = $client->get('articles/570'); 
var_dump($result);

 

Bist du sicher, dass das genau der Code ist den du auch ausführst?

Der Code funktioniert, gerade getestet, aber die Ausgabe die du bekommst passt nicht zum geposteten Code. In deinem var_dump vom ApiClient steht die apiUrl mit /articles/ am Ende. Das gehört da nicht hin und dürfte da anhand des Codes den du gepostet hast auch gar nicht sein. Die richtige URL wäre https://www.xxxx.de/api/

Würde es den Artikel nicht geben müsste es eine andere Fehlermeldung sein. Article by ID xxx not found