PHP Ansprache der Rest API v3

Thema wurde von cdoo, 10. Mai 2022 erstellt.

  1. cdoo

    cdoo Erfahrener Benutzer

    Registriert seit:
    15. November 2018
    Beiträge:
    65
    Danke erhalten:
    29
    Danke vergeben:
    23
    Ich habe versucht die v3 Rest API per Basic Auth anzusprechen und erhalten mit dem Beispiel aus der Doku den nachfolgenden Fehler retour.

    Irgendwo ist da der Hund begraben:

    Test-Code:

    Code:
        $data = '[
    {
        "orderId": "413261",
        "code": "123456789",
        "isReturnDelivery": true,
        "parcelService":
    
            {
                "id": "1",
                "languageCode": "en",
                "name": "DHL",
                "url": "http:\\/\\/nolp.dhl.de\\/nextt-online-public\\/set_identcodes.do?lang=en&idc=123456789&rfn=&extendedSearch=true",
                "comment": "You can access the shipment tracking for your order by visiting the link above.",
                "shipmentType": "Sample Shipment Type"
            },
            "createdOn": "2020-04-15 14:30:35"
        }
    
    ]';
           
          
            $url= "https://testug.webshop.com/api.php/v3/tracking-codes";
           
            $curinit = curl_init($url);
         curl_setopt($curinit, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($curinit, CURLOPT_POST, true);
         curl_setopt($curinit, CURLOPT_CUSTOMREQUEST, "POST");
         curl_setopt($curinit, CURLOPT_POSTFIELDS, $data);
         curl_setopt($curinit, CURLOPT_SAFE_UPLOAD, false);
         curl_setopt($curinit, CURLOPT_HTTPHEADER, array(
                'accept: multipart/form-data',
                'authorization: Basic XXXXXXXXXXXXXXXXXXXXX=='
              ));
         $json = curl_exec($curinit);  
         print_r($json);
    authorization wurde entsprechend als Muster gesetzt

    ich erhalte hier die nachfolgende Ausgabe:

    Code:
    {"error":"An unexpected error occurred.","details":""}
    Danke :)
     
  2. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Code:
        $data = '[
    {
        "orderId": 413261,
        "code": "123456789",
        "isReturnDelivery": true,
        "parcelService":
    
            {
                "id": 1,
                "languageCode": "en",
                "name": "DHL",
                "url": "http:\\/\\/nolp.dhl.de\\/nextt-online-public\\/set_identcodes.do?lang=en&idc=123456789&rfn=&extendedSearch=true",
                "comment": "You can access the shipment tracking for your order by visiting the link above.",
                "shipmentType": "Sample Shipment Type"
            },
            "createdOn": "2020-04-15 14:30:35"
        }
    
    ]';
          
        
            $url= "https://testug.webshop.com/api.php/v3/tracking-codes";
          
            $curinit = curl_init($url);
         curl_setopt($curinit, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($curinit, CURLOPT_POST, true);
         curl_setopt($curinit, CURLOPT_CUSTOMREQUEST, "POST");
         curl_setopt($curinit, CURLOPT_POSTFIELDS, $data);
         curl_setopt($curinit, CURLOPT_SAFE_UPLOAD, false);
         curl_setopt($curinit, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json',
                'Authorization: Basic XXXXXXXXXXXXXXXXXXXXX=='
              ));
         $json = curl_exec($curinit); 
         print_r($json);
    So funktionierts. Die orderId und id müssen ein Integer sein. Das ist in der Doku im Beispiel fehlerhaft und werden wir nachkorrigieren. Außerdem hattest du nicht den richtigen Header gesendet.
     
  3. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.748
    Danke vergeben:
    137
    Ein paar Kleinigkeiten hätte ich noch:

    • Ich würde den Authorization-Header nicht explizit setzen, sondern CURLOPT_USERPWD verwenden.
    • JSON sollte man per json_encode() erzeugen, das ist wesentlich bequemer und sicherer.
    • curl_close() nicht vergessen. :)
     
  4. cdoo

    cdoo Erfahrener Benutzer

    Registriert seit:
    15. November 2018
    Beiträge:
    65
    Danke erhalten:
    29
    Danke vergeben:
    23
    funktioniert perfekt - Danke.

    @Marco (Gambio) curl_close und json werden intergriert, war nur ein code-schnipsel ;)

    Denke auch das dieses Beispiel dem ein oder anderen - über die Suchfunktion - künftig helfen kann.