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