Drittanbieter-API

Dieser Artikel wurde maschinell übersetzt.

Die API dient der Übertragung von Auftragsinformationen zwischen Slevomat und dem System des Handelspartners. Die API erfordert die Implementierung einer bidirektionalen Kommunikation – das Slevomat-System ruft die API des Partners auf und der Partner ruft die API von Slevomat auf.

Aufträge, die an die Partner-API exportiert werden, können in der Slevomat-Partneroberfläche nicht mehr manipuliert, sondern nur noch angesehen werden. Die Manipulation von exportierten Aufträgen kann nur noch über die API erfolgen.

Alle Anfragen müssen über HTTPS gestellt werden und alle Daten liegen im JSON-Format vor.

API-Zugang

Sie können die API-Zugangsdaten über die Registerkarte "Einstellungen" in Ihrer Partneroberfläche aufrufen. Um die Daten zu erhalten, müssen Sie die Root-URL des Partnerteils der API für die Verwendung in der Richtung Slevomat → Partner angeben, z. B.

https://example­.com/slevomat-zbozi-api 

Die Zugangsdaten werden nur einmal beim Zugriff auf die API angezeigt, bitte speichern Sie sie sorgfältig.

Sobald der Zugriff auf die API erfolgt ist, beginnt das System, neu erstellte Aufträge dorthin zu exportieren.

Erster Datenexport

Um bestehende Aufträge zum Zeitpunkt des API-Zugangs zu übertragen, können Sie in der Partnerschnittstelle einen einmaligen Export nach CSV nutzen.

Wenn Sie bestehende Aufträge (die vor der Bereitstellung der API erstellt wurden) in Ihrem eigenen System haben und mit diesen über die API arbeiten möchten, verwenden Sie die Funktion "Arbeit mit markierten Aufträgen über API beginnen" im Menü "Massenaktionen mit Aufträgen".

Beschreibung der üblichen HTTP-Antworten

  • 200 OK – die Anfrage wurde erfolgreich bearbeitet
  • 204 No Content – die Anfrage wurde bearbeitet, die Antwort hat keinen Inhalt
  • 400 Bad Request – die Anfrage ist ungültig – es fehlen möglicherweise Parameter oder sie sind ungültig gegenüber der Spezifikation
  • 403 Forbidden – Client-Autorisierung fehlgeschlagen
  • 404 Not Found – Endpunkt oder erforderliche Daten nicht gefunden
  • 405 Method Not Allowed – der Endpunkt unterstützt diese HTTP-Methode nicht
  • 422 Unprocessable Entity – erwarteter Fehler bei der Verarbeitung der Anfrage (siehe Abschnitt Fehlerbedingungen)
  • 500 Internal Server Error – auf der Serverseite ist ein Fehler aufgetreten
  • 502 Bad Gateway – ein Server-seitiger Fehler ist aufgetreten
  • 503 Service Unavailable – der Server befindet sich im Wartungsmodus (neue Version wird möglicherweise gerade bereitgestellt oder es ist eine Ausfallzeit geplant)
  • 504 Gateway Timeout – ein serverseitiger Fehler ist aufgetreten

HTTP 5×x-Antworten dürfen kein JSON-Format verwenden.

Im Falle von 4xx -Fehlern ist die ausgehende Anfrage fehlerhaft und muss korrigiert werden, bevor sie erneut versucht wird.

Fehler 5xx deuten auf Serverfehler hin, und die Anfrage kann ohne Änderung erneut versucht werden. Im Falle von 503 sollte der Aufrufer die Kopfzeile der Antwort Retry-After beachten und den Versuch erst nach Ablauf der in der Kopfzeile angegebenen Zeit wiederholen.

Status der Bestellung

Ein Auftrag befindet sich immer in einem der folgenden Zustände:

Wert des Status Beschreibung
1 Neue bezahlte Bestellung
Betreut
Unterwegs (nur Bestellungen mit Versand)
Vorbereitung der persönlichen Abholung – z. B. Transport zu einer Filiale
Bereit zur persönlichen Abholung
An den Kunden geliefert – Kundenbestätigung steht noch aus
Geliefert und vom Kunden bestätigt
Kunde weigerte sich, den Erhalt der Bestellung zu bestätigen
Annullierte Bestellung

Der Kunde wird über jede Änderung des Status per E‑Mail informiert.

Die Bestellung muss nicht zwangsläufig alle Status durchlaufen, um erfolgreich ausgeliefert zu werden, von "Neue Bestellung bezahlt" kann man direkt zu "Auf dem Weg" / "Bereit zur persönlichen Abholung" und dann zu "An den Kunden ausgeliefert – Kundenbestätigung erwartet" übergehen. Die Verwendung aller Status führt jedoch zu einer besseren Kundeninformation über den Fortgang der Bestellung und wird empfohlen.

Fehlerzustände

Bei 4×x-HTTP-Codes enthält die Antwort immer den Schlüssel status (siehe nachstehendes Codebuch) und das Feld messages mit Textbeschreibungen der Fehler.

Statuswert Beschreibung
Ungültige Anfrage – fehlende oder ungültige Werte
Ungültige Anmeldedaten
Nicht vorhandener Auftrag
Nicht existierende Auftragsposition
Übergang eines Auftrags in einen nicht genehmigten Zustand
Ungültige Stornierung – Stornierung von mehr Positionen als vorhanden
Sonstiger Fehler
Der Auftrag wurde noch nicht an die Partner-API exportiert – er kann nicht über die API manipuliert werden
Um den Status "Ware an den Kunden geliefert" automatisch zu setzen, müssen Sie die Sendung automatisch auf "Ware zur Abholung bereit" setzen lassen.

Beispiel:

{ "status": 3, "messages": [ "Order #1234 was not found." ] }

Datentypen

Die Datentypen der einzelnen Schlüssel in Anfragen und Antworten werden immer für bestimmte Endpunkte beschrieben. Sofern nicht anders angegeben, ist der Wert in Anführungszeichen "" immer eine obligatorische Zeichenkette. Sofern nicht anders angegeben, ist der numerische Wert immer eine obligatorische Ganzzahl.

Kommunikation Slevomat ⇒ Partner

Dieser Teil der API ist auf der Partnerseite implementiert und wird von Slevomat aufgerufen.

Die benötigte API-Root-URL wird vom Partner zur Verfügung gestellt und sollte die folgende Form haben

 https://www.example.com/slevomat-zbozi-api/v1

Autorisierung anfordern

Wenn die API aktiviert ist, erhält der Partner partner_api_se­cret, was beweist, dass die eingehenden Anfragen tatsächlich von Slevomat stammen.

Dieser Parameter wird im HTTP-Header X-PartnerApiSecret übergeben.

Test-Schnittstelle

Slevomat enthält Funktionen, um die API auf der Partnerseite aufzurufen und die Antwort einzusehen. Die vom Partner bei der Bereitstellung der API angegebene Root-URL wird an -test angehängt, so dass beim Testen die API z. B. unter folgender Adresse aufgerufen wird

https://example­.com/slevomat-zbozi-api-test

aufgerufen wird, um eine Vermischung von Testdaten mit Live-Bestellungen zu vermeiden.

Das Testen der Partner-API erfolgt über POST-Anfragen an die folgenden Adressen:

  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/new-order
    - Neue Bestellung
  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/update-shipping-dates 
    - Massenaktualisierung der voraussichtlichen Versanddaten
  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/order/<or­derId>/mark-delivered 
    - Ändern Sie den Auftragsstatus in "An den Kunden geliefert – Kundenbestätigung steht noch aus".
  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/order/<or­derId>/ready-for-pickup 
    - Bestellstatus ändern in "Bereit zur persönlichen Abholung".
  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/order/<or­derId>/confirm-delivery 
    - Bestätigung der Lieferung
  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/order/<or­derId>/reject-delivery 
    - Verweigerung der Annahme
  • https://www.sle­vomat.cz/test-zbozi-partner-api/v1/order/<or­derId>/cancel 
    - Annullierung

Ersetzen Sie den Teil <orderId> der URL durch eine beliebige Auftragsnummer, Anfragen an die Partner-API werden mit dieser Auftragsnummer gestellt.

Anfragen an diese Testschnittstelle müssen mit den Headern X-PartnerToken und X-ApiSecret autorisiert werden.

Bei einem Testaufruf an die Partner-API sendet das System wie im Echtbetrieb den Header X-PartnerApiSecret.

Die mit einer neuen Bestellung gesendeten Daten sind Testdaten und werden zufällig generiert.

Wenn Sie eine Bestellungsstornierung senden, müssen Sie das Feld items in den POST-Body der Anfrage in JSON (im gleichen Format wie von der API gesendet) aufnehmen, das von der Testschnittstelle validiert und in der gleichen Form an die Partner-API weitergeleitet wird.

Neue Bestellung

Die Anfrage enthält die Daten des neu angelegten Auftrags.

Aufträge haben immer eine eindeutige slevomatId. Erhält die API ein Duplikat slevomatId, sollte die Anfrage von der Partner-API ignoriert werden (die erste Anfrage wurde von Slevomat als erfolglos bewertet und daher wiederholt) und die Antwort sollte ebenfalls HTTP 204 lauten.

created ist das Datum im ISO 8601 Format, d.h. YYYY-MM-DD'T'HH:mm:ss­+zz:zz.

productId enthält die Ereignis-ID, variantId die ID der gekauften Variante.

Die optionale internalId gibt die interne ID an, die für die Aktionsvariante bei ihrer Erstellung in der Partnerschnittstelle eingegeben wurde. Sie dient zur Identifizierung des Produkts im System des Partners.

In billingAddress (Rechnungsadresse) ist nur der Kundenname (name) obligatorisch.

Bei shippingAddress (Lieferadresse) ist die Angabe des Unternehmens (company) fakultativ. Bei Lieferung an shippingAddress enthält sie die Anschrift des Kunden, bei persönlicher Abholung die Anschrift der Einrichtung, in der der Kunde die Waren abholt.

Der Schlüssel delivery.type kann den Wert address (Lieferung an Adresse) oder pickup (persönliche Abholung) annehmen. delivery.name enthält den Namen der Beförderung oder den Namen der Niederlassung.

delivery.expec­tedShippingDa­te (voraussichtliches Versanddatum) und delivery.expec­tedDeliveryDa­te (voraussichtliches Lieferdatum) sind Daten im Format YYYY-MM-DD.

Der Schlüssel weight enthält das Gewicht der Bestellung in Kilogramm. Wenn wir nicht das Gewicht aller Artikel in der Bestellung kennen, nimmt er den Wert null an.

POST /bestellung/$slevomatId

{ "slevomatId": "721896899157", "created": "2021–08–25T15:14:24+02:00", "items": [ { "slevomatId": "960", "productId": "22", "variantId": "105", "internalId": null, "name": "Sandále vel. 42", "amount": 1, "unitPrice": 250.0 }, { "slevomatId": "7577400222", "productId": "1752", "variantId": "9855", "internalId": null, "name": "Ručník modrý", "amount": 10, "unitPrice": 100.0 } ], "billingAddress": { "name": "Petr Novák", "company": "Novák a syn", "street": "Vodičkova 32", "city": "Praha 1", "postalCode": "110 00", "country": "Česko" }, "shippingAddress": { "name": "Petr Novák", "company": null, "street": "Strašnická 8", "city": "Praha", "postalCode": "100 00", "phone": "+420777888999" }, "delivery": { "type": "address", "name": "PPL", "expectedShip­pingDate": "2021–08–27", "expectedDeli­veryDate": "2021–08–30", "price": 100.0 }, "status": 1, "customer": { "email": "petr.novak@e­xample.com" }, "weight": 1.2 }

POST /Bestellung/$slevomatId

{ "slevomatId": "124146766678", "created": "2021–09–01T12:49:37+02:00", "items": [ { "slevomatId": "863", "productId": "64", "variantId": "14", "internalId": null, "name": "Sandále vel. 42", "amount": 1, "unitPrice": 250.0 }, { "slevomatId": "2364201450", "productId": "7057", "variantId": "5802", "internalId": null, "name": "Ručník modrý", "amount": 10, "unitPrice": 100.0 } ], "billingAddress": { "name": "Petr Novák", "company": "Novák a syn", "street": "Vodičkova 32", "city": "Praha 1", "postalCode": "110 00", "country": "Česko" }, "shippingAddress": { "name": "Provozovna Jahodová", "company": null, "street": "Jahodová 33", "city": "Praha 10", "postalCode": "100 00", "phone": "+420222888999", "deliveryPremise": { "id": 45445, "name": "Provozovna Jahodová" } }, "delivery": { "type": "pickup", "name": "Osobní odběr na provozovně", "expectedShip­pingDate": "2021–09–02", "expectedDeli­veryDate": "2021–09–02", "price": 0.0 }, "status": 1, "customer": { "email": "petr.novak@e­xample.com" }, "weight": 1.2 }

Massenaktualisierung der erwarteten Versanddaten

Wenn der Geschäftsmanager auf Wunsch des Partners die Versandtermine ausgewählter Bestellungen in großen Mengen verschiebt, informiert das System die Partner-API über diese Aktualisierung.

Die gesendeten Daten enthalten das Feld für die Auftrags-ID und das neue erwartete Versanddatum.

POST /update-shipping-dates
{ "expectedShip­pingDate": "2021–08–25", "slevomatIds": [ "123456", "45454544" ] }

Stornierung

Stornierungen können sowohl auf der Slevomat-Seite als auch auf dem Partnersystem erstellt werden. Dieser Endpunkt wickelt die Erstellung der Stornierung auf der Slevomat-Seite und ihre Übertragung an das System des Partners ab.

Er erstellt eine Stornierung von Auftragspositionen in der angegebenen Menge. Wenn der gesamte Auftrag storniert werden soll, werden alle Positionen mit der entsprechenden Menge aufgelistet.

Einzelne Positionen können auch teilweise storniert werden (z. B. 1 von 2).

Ein Stornovermerk (note) ist optional.

POST /order/$slevo­matId/cancel
{ "items": [ { "slevomatId": "1212", "amount": 1 }, { "slevomatId": "4545454", "amount": 2 } ], "note": "storno v zákonné lhůtě" }

Bestätigung der Lieferung

Nachdem Sie die Bestellung als "An den Kunden geliefert" markiert haben, bitten wir den Kunden um eine Bestätigung, dass er die Bestellung tatsächlich erhalten hat. Wenn die Bestellung als eingegangen markiert ist, wird dieser Endpunkt aufgerufen.

POST /order/$slevo­matId/confirm-delivery
{}

Verweigerung der Annahme

POST /order/$slevo­matId/reject-delivery
{ "rejectionReason": "Důvod odmítnutí zákazníkem" }

Änderung des Auftragsstatus in "Bereit zur persönlichen Abholung"

Dieser Endpunkt wird aufgerufen, wenn der previous Status "Bereit zur persönlichen Abholung" mit autoMarkRea­dyForPickuptrue gesetzt wurde und der Auftrag auf der Slevomat-Seite automatisch auf "Bereit zur persönlichen Abholung" umgestellt wurde.

POST /order/$slevo­matId/delivery-ready-for-pickup
{}

Ändern Sie den Status der Bestellung auf "An den Kunden ausgeliefert – Kundenbestätigung erwartet".

Dieser Endpunkt wird aufgerufen, wenn der previous Status "Unterwegs", "Bereit zur persönlichen Abholung" oder "Bereit zur persönlichen Abholung" mit autoMarkDeli­veredtrue gesetzt wurde und der Auftrag auf der Slevomat-Seite automatisch in den Status "An Kunde ausgeliefert – wartet auf Kundenbestätigung" umgeschaltet wurde.

POST /order/$slevo­matId/mark-delivered
{}

Kommunikationspartner ⇒ Slevomat

Dieser Teil der API ist auf der Slevomat-Seite implementiert und wird vom Partnersystem aufgerufen.

Die Root-URL der API lautet

 https://www.slevomat.cz/zbozi-api/v1

PHP-Bibliothek

Um diese Seite der API zu implementieren, können Sie die vorbereitete PHP-Bibliothek verwenden. Die Bibliothek erfordert derzeit PHP 5.4 oder höher und erfordert die Verwendung von Composer.

Anweisungen zur Verwendung der Bibliothek und der Quellcode sind auf GitHub zu finden.

Autorisierung anfordern

Wenn die API aktiviert ist, erhält der Partner partner_token und api_secret, mit denen er sich beim Aufruf der Slevomat API authentifizieren kann.

Diese Parameter werden in den Headern X-PartnerToken und X-ApiSecret übergeben.

Test-Schnittstelle

Die Stamm-URL der Testschnittstelle lautet

https://www.slevomat.cz/zbozi-api/v1-test

Auf ihr können alle Aktionen wie auf der Live-Oberfläche aufgerufen werden.

Die Testschnittstelle prüft die Autorisierung von Anfragen (Korrektheit des Partner-Tokens und des API-Geheimnisses) und die Gültigkeit der eingehenden Anfragekörper (JSON). In diesen Punkten verhält sie sich identisch zur Live-API.

Die Testschnittstelle arbeitet jedoch nicht mit tatsächlichen Aufträgen. Sie prüft also nicht, ob ein Auftrag zwischen den richtigen Zuständen wechselt und ob er Positionen mit den angegebenen IDs enthält. Sobald die Autorisierung und die Formularvalidierung der Anfrage bestanden sind, gibt die Testschnittstelle immer einen Erfolgscode von 200 oder 204 aus.

Erstellen einer Stornierung

Erzeugt eine Stornierung von Auftragspositionen in der angegebenen Menge. Wenn der Auftrag komplett storniert werden soll, werden alle Positionen mit der entsprechenden Menge aufgelistet.

Einzelne Positionen können auch teilweise storniert werden (z. B. 1 von 2).

Ein Stornovermerk (note) ist optional.

POST /bestellung/$slevomatId/cancel

{ "items": [ { "slevomatId": 45454, "amount": 15 } ], "note": "nepovinná poznámka" }

Auftragsstatus auf "Pending" ändern

POST /bestellung/$slevomatId/mark-pending

{}

Bestellstatus in "Unterwegs" ändern

Für eine Bestellung kann über den Parameter autoMarkDelivered festgelegt werden, ob sie nach einer festgelegten Versandzeit ("Zeit von der Lieferung bis zur Auslieferung") automatisch in den Status "An den Kunden geliefert – Kundenbestätigung erwartet" wechseln soll.

Die Antwort enthält ein aktualisiertes voraussichtliches Lieferdatum.

POST /bestellung/$slevomatId/mark-en-route

{ "autoMarkDeli­vered": true }

Antwort 200

{ "expectedDeli­veryDate": "2021–08–25" }

Bestellstatus auf "Bereit zur persönlichen Abholung" ändern

Mit dem Parameter autoMarkReady­ForPickup können Sie festlegen, ob der Auftrag nach Ablauf der Zeit vom Versand bis zur Zustellung für eine bestimmte Art von Annahmestelle automatisch in den Status "Bereit zur persönlichen Abholung" umgeschaltet werden soll.

Für einen Auftrag kann über den Parameter autoMarkDelivered festgelegt werden, ob er nach einer bestimmten Anzahl von Tagen für die Abholung bei einer bestimmten Art von Annahmestelle automatisch vom Status "Bereit zur persönlichen Abholung" in den Status "An Kunde geliefert – wartet auf Kundenbestätigung" wechseln soll.

Die Kombination der Parameter autoMarkReady­ForPickup false und autoMarkDelivered true ist nicht zulässig. In diesem Fall wird der Fehlercode 9 zurückgegeben.

Die Antwort enthält ein aktualisiertes voraussichtliches Lieferdatum.

POST /bestellung/$slevomatId/mark-bereit-zur-abholung

{ "autoMarkReady­ForPickup": true, "autoMarkDeli­vered": true }

Antwort 200

{ "expectedDeli­veryDate": "2021–08–25" }

Bestellstatus auf "Bereit zur persönlichen Abholung" ändern

Mit dem Parameter autoMarkDelivered kann festgelegt werden, ob der Auftrag nach einer bestimmten Anzahl von Tagen für die Abholung bei einer bestimmten Art von Abholstelle automatisch in den Status "Ausgeliefert an Kunde – wartet auf Kundenbestätigung" versetzt werden soll.

POST /order/$slevo­matId/mark-ready-for-pickup
{ "autoMarkDeli­vered": true }

Den Auftragsstatus in "An den Kunden geliefert – auf Kundenbestätigung wartend" ändern

POST /order/$slevo­matId/mark-delivered
{}

Lieferadresse ändern

Die Lieferadresse kann nur für die Lieferung an eine Adresse geändert werden (d.h. der Ort der persönlichen Abholung kann nicht geändert werden).

Alle Schlüssel außer company sind erforderlich.

Gültige Werte für den Schlüssel state sind cz (Tschechische Republik) und sk (Slowakei).

POST /order/$slevo­matId/update-shipping-address
{ "name": "Karel Novák", "street": "Pod horou 34", "city": "Pardubice", "postalCode": "530 00", "state": "CZ", "phone": "+420777888999", "company": "Knihkupectví Novák" }

Änderungsliste

Zurück zur Liste der Artikel

Ähnliche Artikel


Nahoru