arcronisarcronis MitgliedKommentare: 3 Danke erhalten: 0 Mitglied seit: 20. April

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.

Antworten

  • ArgeeArgee MitgliedKommentare: 32 Danke erhalten: 4 Mitglied seit: 2. März

    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

  • arcronisarcronis MitgliedKommentare: 3 Danke erhalten: 0 Mitglied seit: 20. April

    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

  • brettvormkoppbrettvormkopp MitgliedKommentare: 771 Danke erhalten: 149 Mitglied seit: März 2013

    Ü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.

  • arcronisarcronis MitgliedKommentare: 3 Danke erhalten: 0 Mitglied seit: 20. April

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

  • arcronisarcronis MitgliedKommentare: 3 Danke erhalten: 0 bearbeitet 21. April Mitglied seit: 20. April

    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 "<h2>HTTP: $httpCode</h2>";
            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 '<h2>Could not decode json</h2>';
                echo 'json_last_error: ' . $jsonErrors[json_last_error()];
                echo '<br>Raw:<br>';
                echo '<pre>' . print_r($result, true) . '</pre>';
    
                return;
            }
            if (!isset($decodedResult['success'])) {
                echo 'Invalid Response';
    
                return;
            }
            if (!$decodedResult['success']) {
                echo '<h2>No Success</h2>';
                echo '<p>' . $decodedResult['message'] . '</p>';
                if (array_key_exists('errors', $decodedResult) && is_array($decodedResult['errors'])) {
                    echo '<p>' . join('</p><p>', $decodedResult['errors']) . '</p>';
                }
    
                return;
            }
            echo '<h2>Success</h2>';
            if (isset($decodedResult['data'])) {
                echo '<pre>' . print_r($decodedResult['data'], true) . '</pre>';
            }
    
            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 "<pre>";
    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)
    }

     

  • ArgeeArgee MitgliedKommentare: 32 Danke erhalten: 4 bearbeitet 21. April Mitglied seit: 2. März

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

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

  • brettvormkoppbrettvormkopp MitgliedKommentare: 771 Danke erhalten: 149 Mitglied seit: März 2013

     

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

     

  • t2oh4et2oh4e MitgliedKommentare: 552 Danke erhalten: 178 Mitglied seit: Februar 2013

    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

Anmelden oder Registrieren, um zu kommentieren.