API służy do przesyłania informacji o zamówieniach między Discount Machine a systemem partnera biznesowego. API wymaga implementacji dwukierunkowej komunikacji – system Discount Machine wywołuje API partnera, a partner wywołuje API Discount Machine.
Zamówienia wyeksportowane do API partnera nie mogą być już modyfikowane w interfejsie partnera Zlavomat, można je jedynie przeglądać. Wyeksportowanymi zamówieniami można teraz manipulować tylko za pośrednictwem API.
Wszystkie żądania muszą być przesyłane za pomocą protokołu HTTPS, a wszystkie dane muszą być w formacie JSON.
Dostępność API
Dostęp do API można uzyskać w zakładce Ustawienia w interfejsie partnera. Aby pobrać dane, należy wprowadzić główny adres URL części partnerskiej API, wybierając opcję Zlavomat → Partner, np.
https://example.com/slevomat-zbozi-api
Dane dostępowe zostaną wyświetlone dopiero po uzyskaniu dostępu do interfejsu API, dlatego należy je chronić.
Po udostępnieniu API system rozpocznie eksportowanie do niego nowo utworzonych zamówień.
Początkowy eksport danych
Aby przenieść istniejące zamówienia w momencie udostępnienia API, można skorzystać z jednorazowego eksportu do pliku CSV w interfejsie partnera.
Jeśli w swoim systemie posiadasz już istniejące zamówienia (utworzone przed udostępnieniem API) i chcesz zacząć z nimi pracować za pośrednictwem API, skorzystaj z funkcji „Rozpocznij pracę z oznaczonymi zamówieniami za pośrednictwem API” w menu „Działania zbiorcze na zamówieniach”.
Opis typowych odpowiedzi HTTP
200 OK
– żądanie zostało pomyślnie przetworzone204 No Content
– żądanie zostało pomyślnie przetworzone, odpowiedź nie zawiera treści400 Bad Request
– żądanie jest nieprawidłowe – może brakować parametrów lub są one nieprawidłowe w porównaniu ze specyfikacją403 Forbidden
– autoryzacja klienta nie powiodła się404 Not Found
– nie znaleziono punktu końcowego lub żądanych danych405 Method Not Allowed
– punkt końcowy nie obsługuje tej metody protokołu HTTP422 Unprocessable Entity
– oczekiwany błąd podczas przetwarzania żądania (patrz sekcja Stany błędów )500 Internal Server Error
– wystąpił błąd po stronie serwera502 Bad Gateway
– wystąpił błąd po stronie serwera503 Service Unavailable
– serwer znajduje się w trybie konserwacyjnym (może być w trakcie wdrażania nowej wersji lub planowane jest przestoje)504 Gateway Timeout
– wystąpił błąd po stronie serwera
Odpowiedzi HTTP 5×x nie muszą używać formatu JSON.
W przypadku błędów4xx
W żądaniu wychodzącym wystąpił błąd. Przed ponowną próbą należy go naprawić.
Błędy5xx
wskazują błędy serwera i żądanie można powtórzyć bez jego zmiany. W przypadku503
osoba dzwoniąca powinna uszanować nagłówek odpowiedziRetry-After
i powtórz kolejną próbę dopiero po upływie czasu określonego w nagłówku.
Statusy zamówień
Zamówienie zawsze posiada jeden z poniższych statusów:
Wartość statusu | Opis |
1 | Nowe opłacone zamówienie |
2 | Jest w trakcie przygotowywania. |
3 | W drodze (tylko zamówienia z wysyłką) |
4 | Przygotowanie do odbioru osobistego – np. trwa transport do oddziału |
5 | Gotowy do odbioru osobistego |
6 | Dostarczono do klienta – oczekiwanie na potwierdzenie przez klienta |
7 | Dostarczone i potwierdzone przez klienta |
8 | Klient odmówił potwierdzenia otrzymania zamówienia. |
9 | Anulowane zamówienie |
O każdej zmianie statusu klient jest informowany drogą mailową.
Zamówienie nie musi koniecznie przejść przez wszystkie statusy, aby zostało pomyślnie dostarczone; ze statusu „Nowe opłacone zamówienie” można przejść bezpośrednio do statusu „W drodze” / „Gotowe do odbioru osobistego”, a następnie do statusu „Dostarczone do klienta – oczekuje na potwierdzenie przez klienta”. Korzystanie ze wszystkich statusów zapewnia jednak lepsze informacje o postępach realizacji zamówienia i zalecamy to.
Stany błędów
W przypadku kodów HTTP 4×x odpowiedź zawsze zawiera kluczstatus
(zobacz listę kodów poniżej) i polemessages
z opisami tekstowymi błędów.
Wartość statusu | Opis |
1 | Nieprawidłowe żądanie – brakujące lub nieprawidłowe wartości |
2 | Nieprawidłowe dane logowania |
3 | Nieistniejące zamówienie |
4 | Nieistniejący element zamówienia |
5 | Przejście zamówienia do statusu nieautoryzowanego |
6 | Nieprawidłowe anulowanie – anulowanie większej liczby pozycji niż istnieje |
7 | Kolejny błąd |
8 | Zamówienie nie zostało jeszcze wyeksportowane do API partnera – nie ma możliwości manipulowania nim za pomocą API |
9 | Aby automatycznie ustawić status na „Towary dostarczone do klienta”, konieczne jest automatyczne ustawienie przesyłki na status „Towary gotowe do odbioru”. |
Próbka:
{ "status": 3, "messages": [ "Order #1234 was not found." ] }
Typy danych
Typy danych poszczególnych kluczy w żądaniach i odpowiedziach są zawsze opisywane dla konkretnych punktów końcowych. O ile nie zaznaczono inaczej, wartość w cudzysłowie.""
jest zawsze wymaganym ciągiem znaków. O ile nie określono inaczej, wartość liczbowa jest zawsze wymaganą liczbą całkowitą.
Maszyna do Rabatów Komunikacyjnych ⇒ Partner
Ta część API jest implementowana po stronie partnera i nazywana jest przez Zlavovamat.
Wymagany główny adres URL interfejsu API zostanie udostępniony przez partnera i powinien mieć postać
https://www.example.com/slevomat-zbozi-api/v1
Autoryzacja żądań
Po włączeniu API partner otrzymujepartner_api_secret
, co dowodzi, że przychodzące zapytania rzeczywiście pochodzą ze Zlavomat.
Ten parametr jest przekazywany w nagłówku HTTPX-PartnerApiSecret
.
Interfejs testowy
Maszyna rabatowa obejmuje funkcjonalność umożliwiającą wywołanie API po stronie partnera i wyświetlenie odpowiedzi. Główny adres URL określony przez partnera podczas udostępniania API jest dołączony do-test
, więc w ramach testowania API jest wywoływane na przykład
https://example.com/slevomat-zbozi-api-test
aby uniknąć mieszania danych testowych z zamówieniami na żywo.
Testowanie interfejsu API partnera odbywa się za pomocą żądań POST wysyłanych na następujące adresy:
– Nowe zamówieniehttps://www.zlavomat.sk/test-zbozi-partner-api/v1/new-order
– Masowa aktualizacja przewidywanych dat wysyłkihttps://www.zlavomat.sk/test-zbozi-partner-api/v1/update-shipping-dates
– Zmiana statusu zamówienia na „Dostarczone do klienta – oczekiwanie na potwierdzenie przez klienta”https://www.zlavomat.sk/test-zbozi-partner-api/v1/order/<orderId>/mark-delivered
– Zmiana statusu zamówienia na „Gotowe do odbioru osobistego”https://www.zlavomat.sk/test-zbozi-partner-api/v1/order/<orderId>/ready-for-pickup
– Potwierdzenie dostawyhttps://www.zlavomat.sk/test-zbozi-partner-api/v1/order/<orderId>/confirm-delivery
– Odmowa przyjęciahttps://www.zlavomat.sk/test-zbozi-partner-api/v1/order/<orderId>/reject-delivery
– Anulowaćhttps://www.zlavomat.sk/test-zbozi-partner-api/v1/order/<orderId>/cancel
Część adresu URL<orderId>
zastąp dowolnym numerem zamówienia; żądania do interfejsu API partnera będą wysyłane z użyciem tego numeru zamówienia.
Żądania do tego interfejsu testowego muszą być autoryzowane za pomocą nagłówkówX-PartnerToken
IX-ApiSecret
.
Podczas testowania wywołania interfejsu API partnera system wysyła nagłówekX-PartnerApiSecret
tak jak podczas normalnej eksploatacji.
Dane przesłane wraz z nowym zamówieniem mają charakter testowy i są generowane losowo.
W przypadku wysyłania anulowania zamówienia konieczne jest dołączenie pola JSON do treści żądania POST.items
(w tym samym formacie, w jakim wysyłane jest przez API), który interfejs testowy weryfikuje i przesyła do API partnera w tej samej formie.
Nowe zamówienie
Zapytanie zawiera dane nowo utworzonego zamówienia.
Zamówienia są zawsze wyjątkowezlavomatId
Jeśli w interfejsie API pojawi się duplikatzlavomatId
Interfejs API partnera powinien zignorować żądanie (pierwsze żądanie wysłane przez Zľavomat zostało ocenione jako nieudane, dlatego je powtarzamy) i odpowiedzieć kodem HTTP 204.
created
jest datą w formacie ISO 8601, tj.YYYY-MM-DD'T'HH:mm:ss+zz:zz
.
productId
zawiera identyfikator akcji, variantId
Identyfikator zakupionego wariantu.
FakultatywnyinternalId
Oznacza wewnętrzny identyfikator wprowadzony dla wariantu akcji podczas jego tworzenia w interfejsie partnera. Służy do identyfikacji produktu w systemie partnera.
WbillingAddress
(adres rozliczeniowy) wymagane jest tylko imię i nazwisko ()name
) klienta.
WshippingAddress
(adres dostawy) jest opcjonalnym polem firmy (company
). W przypadku dostawy na adresshippingAddress
zawiera adres Klienta, a w przypadku odbioru osobistego adres sklepu, w którym Klient odbierze towar.
Klawiszdelivery
.type
może przyjmować wartościaddress
(dostawa na adres) lubpickup
(odbiór osobisty).delivery
.name
zawiera nazwę transportu lub nazwę operacji.
delivery
.expectedShippingDate
(przewidywana data wysyłki) idelivery
.expectedDeliveryDate
(przewidywana data dostawy) to dane w formacieYYYY-MM-DD
.
Klawiszweight
Zawiera wagę zamówienia w kilogramach. Jeśli nie znamy wagi wszystkich pozycji w zamówieniu, przyjmuje wartośćnull
.
POST /order/$slevomatId
{ "slevomatId": "480058070336", "created": "2021–09–06T16:39:02+02:00", "items": [ { "slevomatId": "7767", "productId": "25", "variantId": "194", "internalId": null, "name": "Sandále vel. 42", "amount": 1, "unitPrice": 250.0 }, { "slevomatId": "4764573102", "productId": "3065", "variantId": "385", "internalId": null, "name": "Ručník modrý", "amount": 10, "unitPrice": 100.0 } ], "billingAddress": { "name": "Petr Novák", "company": null, "street": null, "city": null, "postalCode": null, "country": null }, "shippingAddress": { "name": "Petr Novák", "company": null, "street": "Strašnická 8", "city": "Praha", "postalCode": "100 00", "phone": "+420777888999" }, "delivery": { "type": "address", "name": "PPL", "expectedShippingDate": "2021–09–08", "expectedDeliveryDate": "2021–09–11", "price": 100.0 }, "status": 1, "customer": { "email": "petr.novak@example.com" }, "weight": 1.2 }
POST /order/$slevomatId
{ "slevomatId": "286238184713", "created": "2021–09–06T16:39:02+02:00", "items": [ { "slevomatId": "3461", "productId": "9", "variantId": "136", "internalId": null, "name": "Sandále vel. 42", "amount": 1, "unitPrice": 250.0 }, { "slevomatId": "2320086446", "productId": "2855", "variantId": "7027", "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ě", "expectedShippingDate": "2021–09–07", "expectedDeliveryDate": "2021–09–07", "price": 0.0 }, "status": 1, "customer": { "email": "petr.novak@example.com" }, "weight": 1.2 }
Masowa aktualizacja przewidywanych dat wysyłki
Jeżeli menadżer transakcji, na prośbę partnera, zbiorczo zmieni daty wysyłki wybranych zamówień, system poinformuje API partnera o tej aktualizacji.
Przesłane dane zawierają pole z identyfikatorem zamówienia i nową przewidywaną datą wysyłki.
POST /update-shipping-dates
{ "expectedShippingDate": "2021–09–06", "slevomatIds": [ "123456", "45454544" ] }
Anulować
Anulacje można tworzyć zarówno po stronie Zlavomat, jak i w systemie partnerskim. Ten punkt końcowy obsługuje tworzenie anulacji po stronie Zlavomat i ich przesyłanie do systemu partnerskiego.
Tworzy anulowanie zamówienia dla pozycji w określonej ilości. Jeśli całe zamówienie ma zostać anulowane, wyświetlane są wszystkie pozycje w odpowiedniej ilości.
Poszczególne pozycje można również częściowo anulować (np. 1 sztukę z dwóch).
Notatka o anulowaniu (note
) jest opcjonalne.
POST /order/$slevomatId/cancel
{ "items": [ { "slevomatId": "1212", "amount": 1 }, { "slevomatId": "4545454", "amount": 2 } ], "note": "storno v zákonné lhůtě" }
Potwierdzenie dostawy
Po oznaczeniu zamówienia jako „Dostarczone do klienta” poprosimy klienta o potwierdzenie, że je faktycznie otrzymał. Po oznaczeniu zamówienia jako otrzymanego, zostanie wywołany ten punkt końcowy.
POST /order/$slevomatId/confirm-delivery
{}
Odmowa przyjęcia
POST /order/$slevomatId/reject-delivery
{ "rejectionReason": "Důvod odmítnutí zákazníkem" }
Zmiana statusu zamówienia na „Gotowe do odbioru osobistego”
Ten punkt końcowy zostanie wywołany, jeśli poprzedni status „Przygotowanie do odbioru osobistego” został ustawiony naautoMarkReadyForPickup
true
a po stronie Zlavomat zamówienie automatycznie przeszło w status „Gotowe do odbioru osobistego”
POST /order/$slevomatId/delivery-ready-for-pickup
{}
Zmiana statusu zamówienia na „Dostarczone do klienta – oczekiwanie na potwierdzenie przez klienta”
Ten punkt końcowy zostanie wywołany, jeśli poprzedni status został ustawiony na „W drodze”, „Przygotowywanie do odbioru osobistego” lub „Gotowy do odbioru osobistego”autoMarkDelivered
true
a po stronie Zlavomat zamówienie automatycznie zmieniło status na „Dostarczone do klienta – oczekuje na potwierdzenie przez klienta”.
POST /order/$slevomatId/mark-delivered
{}
Partner komunikacyjny ⇒ Maszyna rabatowa
Ta część API jest implementowana po stronie Zľavomat i jest wywoływana przez system partnerski.
Główny adres URL interfejsu API to
https://www.zlavomat.sk/zbozi-api/v1
Biblioteka PHP
Aby zaimplementować tę stronę API, możesz skorzystać z gotowej biblioteki PHP. Biblioteka wymaga obecnie wersji PHP 5.4 lub nowszej i zakłada korzystanie z narzędzia Composer.
Instrukcje dotyczące biblioteki i kod źródłowy można znaleźć na GitHub .
Autoryzacja żądań
Po włączeniu API partner otrzymujepartner_token
Iapi_secret
, który jest używany do udowodnienia podczas wywoływania API Zlavomat.
Te parametry są przekazywane w nagłówkachX-PartnerToken
IX-ApiSecret
.
Interfejs testowy
Główny adres URL interfejsu testowego to
https://www.zlavomat.sk/zbozi-api/v1-test
Można na nim wywoływać wszystkie akcje tak jak na drugim interfejsie.
Interfejs testowy sprawdza autoryzację żądań (poprawność tokenu partnera i sekretu API) oraz ważność przychodzących treści żądań (JSON). Pod tym względem zachowuje się identycznie jak interfejs API na żywo.
Interfejs testowy nie działa jednak z rzeczywistymi zamówieniami. Nie weryfikuje on, czy zamówienie przechodzi między prawidłowymi stanami i czy zawiera pozycje o podanych identyfikatorach. Po pomyślnej autoryzacji i walidacji formularza zamówienia, interfejs testowy zawsze odpowiada kodem powodzenia 200 lub 204.
Utwórz anulowanie
Utwórz pozycje do anulowania zamówienia w określonej ilości. Jeśli całe zamówienie ma zostać anulowane, wszystkie pozycje z odpowiednią ilością zostaną wyświetlone.
Poszczególne pozycje można również częściowo anulować (np. 1 sztukę z dwóch).
Notatka o anulowaniu (note
) jest opcjonalne.
POST /order/$slevomatId/cancel
{ "items": [ { "slevomatId": 45454, "amount": 15 } ], "note": "nepovinná poznámka" }
Zmiana statusu zamówienia na „Przetwarzanie”
POST /order/$slevomatId/mark-pending
{}
Zmiana statusu zamówienia na „W drodze”
Przy składaniu zamówienia należy podać parametrautoMarkDelivered
określ, czy status ma automatycznie zmienić się na „Dostarczone do klienta – oczekiwanie na potwierdzenie przez klienta” po ustawionym okresie transportu („Czas od wysyłki do dostawy”)
Odpowiedź zawiera zaktualizowaną szacunkową datę dostawy.
POST /order/$slevomatId/mark-en-route
{ "autoMarkDelivered": true }
Odpowiedź 200
{ "expectedDeliveryDate": "2021–08–25" }
Zmiana statusu zamówienia na „Przygotowanie do odbioru osobistego”
Przy składaniu zamówienia należy podać parametrautoMarkReadyForPickup
określić, czy status ma zostać automatycznie zmieniony na „Gotowy do odbioru osobistego” po upływie czasu od nadania do dostarczenia dla danego typu punktu odbioru.
Przy składaniu zamówienia należy podać parametrautoMarkDelivered
określ, czy status ma się automatycznie zmieniać z „Gotowe do odbioru osobistego” na „Dostarczone do klienta – oczekiwanie na potwierdzenie przez klienta” po upływie określonej liczby dni od odbioru w danym punkcie odbioru.
Kombinacja parametrówautoMarkReadyForPickup
fałszywy iautoMarkDelivered
Wartość true jest niedozwolona. W takim przypadku zwracany jest kod błędu 9.
Odpowiedź zawiera zaktualizowaną szacunkową datę dostawy.
POST /order/$slevomatId/mark-getting-ready-for-pickup
{ "autoMarkReadyForPickup": true, "autoMarkDelivered": true }
Odpowiedź 200
{ "expectedDeliveryDate": "2021–09–06" }
Zmiana statusu zamówienia na „Gotowe do odbioru osobistego”
Przy składaniu zamówienia należy podać parametrautoMarkDelivered
określ, czy status ma zostać automatycznie zmieniony na „Dostarczone do klienta – oczekiwanie na potwierdzenie przez klienta” po upływie ustalonej liczby dni odbioru dla danego typu punktu odbioru.
POST /order/$slevomatId/mark-ready-for-pickup
{ "autoMarkDelivered": true }
Zmiana statusu zamówienia na „Dostarczone do klienta – oczekiwanie na potwierdzenie przez klienta”
POST /order/$slevomatId/mark-delivered
{}
Zmiana adresu dostawy
Adres dostawy można zmienić jedynie w przypadku doręczenia przesyłki pod wskazany adres (tj. nie można zmienić miejsca odbioru).
Wszystkie klucze opróczcompany
są obowiązkowe.
Prawidłowe wartości dla kluczastate
Czycz
(Czechy) isk
(Słowacja).
POST /order/$slevomatId/update-shipping-address
{ "name": "Karel Novák", "street": "Pod horou 34", "city": "Pardubice", "postalCode": "530 00", "state": "CZ", "phone": "+420777888999", "company": "Knihkupectví Novák" }