update
This commit is contained in:
3
.env
Normal file
3
.env
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
url: https://softra.com.pl:8444/rent2www-ci-tst
|
||||||
|
username: ci938221
|
||||||
|
password: a29ZkiYEvKnjcK2
|
||||||
Binary file not shown.
95
docs/rent-api-00-wstep-i-zasady.md
Normal file
95
docs/rent-api-00-wstep-i-zasady.md
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
# Softra Rent API - Transkrypcja: Wst?p i zasady
|
||||||
|
|
||||||
|
> ?r?d?o: "Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf"
|
||||||
|
|
||||||
|
Specyfikacja serwisu wymiany danych
|
||||||
|
SOFTRA_RENT_API
|
||||||
|
|
||||||
|
Wersja 1.15
|
||||||
|
|
||||||
|
Data utworzenia: 2023-03-20
|
||||||
|
Data ostatniej modyfikacji: 2025-12-10
|
||||||
|
|
||||||
|
Spis treści
|
||||||
|
Przedmiot opracowania ............................................................................................................. 4
|
||||||
|
Technologia ................................................................................................................................ 4
|
||||||
|
Architektura ................................................................................................................................ 4
|
||||||
|
Bezpieczeństwo .......................................................................................................................... 4
|
||||||
|
Opis metod ................................................................................................................................. 5
|
||||||
|
1. Generowanie tokena JWT .............................................................................................. 5
|
||||||
|
2. Pobranie listy oddziałów ................................................................................................ 6
|
||||||
|
3. Pobranie listy dostępnych klas pojazdów ...................................................................... 7
|
||||||
|
4. Pobranie listy dostępnych marek i modeli w danej klasie i oddziale ............................. 7
|
||||||
|
5. Pobranie cen ................................................................................................................... 8
|
||||||
|
6. Utworzenie klienta ....................................................................................................... 11
|
||||||
|
7. Pobranie danych klienta ............................................................................................... 14
|
||||||
|
8. Aktualizacja danych klienta .......................................................................................... 16
|
||||||
|
9. Utworzenie rezerwacji.................................................................................................. 16
|
||||||
|
10. Dodanie klienta do istniejącej rezerwacji................................................................... 20
|
||||||
|
11. Potwierdzenie rezerwacji ........................................................................................... 20
|
||||||
|
12. Anulowanie rezerwacji ............................................................................................... 21
|
||||||
|
13. Pobieranie listy faktur dla rezerwacji ......................................................................... 21
|
||||||
|
14. Pobieranie listy faktur związanych z klientem ........................................................... 22
|
||||||
|
15. Pobieranie dokumentu faktury .................................................................................. 22
|
||||||
|
16. Sprawdzenie poświadczeń klienta ............................................................................. 23
|
||||||
|
17. Tworzenie tokena do zmiany hasła konta klienta ...................................................... 23
|
||||||
|
18. Zmiana hasła konta klienta......................................................................................... 24
|
||||||
|
19. Podsumowanie opłat przed złożeniem rezerwacji..................................................... 25
|
||||||
|
20. Pobieranie listy wynajmów i rezerwacji klienta ......................................................... 27
|
||||||
|
21. Pobieranie definicji oświadczeń/zgód marketingowych ............................................ 28
|
||||||
|
22. Sprawdzenie czy istnieje konto dla podanego loginu ................................................ 28
|
||||||
|
23. Dodawanie wpłat i kaucji do rezerwacji ..................................................................... 29
|
||||||
|
24. Pobieranie listy opłat dodatkowych dla podanej rezerwacji / wynajmu ................... 30
|
||||||
|
25. Pobieranie listy wpłat dla podanej rezerwacji / wynajmu ......................................... 30
|
||||||
|
26. Dodawanie płatnika .................................................................................................... 31
|
||||||
|
27. Wysłanie tokenu potwierdzający email dla podanego loginu klienta ....................... 32
|
||||||
|
28. Potwierdzenie adresu email klienta ........................................................................... 33
|
||||||
|
29. Pobieranie wszystkich symboli klas ............................................................................ 33
|
||||||
|
30. Pobieranie wszystkich modeli pojazdów.................................................................... 34
|
||||||
|
31. Pobieranie listy opłat zadeklarowanych w systemie ................................................. 34
|
||||||
|
32. Przykład uzgodnień wdrożeniowych .......................................................................... 35
|
||||||
|
|
||||||
|
Przedmiot opracowania
|
||||||
|
Specyfikacja określa API do systemu Flota Rent o nazwie „Softra_Rent_API”.
|
||||||
|
Interface udostępniać będzie szereg funkcji służących do realizacji współpracy stron
|
||||||
|
internetowych wypożyczalni samochodów z bazą danych systemu zarządzania wypożyczalnią
|
||||||
|
„Flota Rent” produkcji firmy Softra Systemy Informatyczne.
|
||||||
|
|
||||||
|
Uwaga : Niemniejsze opracowanie stanowi utwór w rozumieniu prawa autorskiego. Prawa
|
||||||
|
autorskie do niniejszego opracowania przysługują Wojciechowi Lewandowskiemu Softra
|
||||||
|
Systemy Informatyczne.
|
||||||
|
Opracowanie może być wykorzystywane tylko w celu uzgodnienia oferty składanej przez
|
||||||
|
Softra oraz jej realizacji.
|
||||||
|
Wykorzystywanie niniejszego opracowania w całości lub części bez zgody autora nie jest
|
||||||
|
dozwolone.
|
||||||
|
Zakres i sposób realizacji funkcji API Softra_Rent_API stanowi tajemnicę przedsiębiorstwa
|
||||||
|
Softra Systemy Informatyczne.
|
||||||
|
|
||||||
|
Technologia
|
||||||
|
Serwis tworzony jest w technologii REST API. Fomat wymiany danych - JSON
|
||||||
|
|
||||||
|
Architektura
|
||||||
|
Architektura API uwzględnia zakłada utworzenie serwera usługi REST po stronie
|
||||||
|
systemu Flota Rent oraz klienta usługi wykorzystywanego po stronie strony internetowej
|
||||||
|
wypożyczalni. Oznacza to, że wywołanie metod odbywa się zawsze po stronie klienta.
|
||||||
|
|
||||||
|
Bezpieczeństwo
|
||||||
|
|
||||||
|
Zastosowano mechanizm uwierzytelniania JWT (Json Web Token). Zalecane jest
|
||||||
|
ograniczenie dostępu do usługi do wskazanych przez klienta adresów IP.
|
||||||
|
|
||||||
|
Warianty odpowiedzi - statusy HTTP:
|
||||||
|
|
||||||
|
Status Opis
|
||||||
|
200 Prawidłowa odpowiedź - zwrócony obiekt odpowiadający danej metodzie
|
||||||
|
|
||||||
|
400 Błędne dane w wysyłanym żądaniu ( brak wymaganych danych, dane
|
||||||
|
niekompletne )
|
||||||
|
|
||||||
|
401 Błąd autoryzacji / token nieaktualny.
|
||||||
|
|
||||||
|
403 Nieautoryzowany dostęp
|
||||||
|
|
||||||
|
500 Błąd wewnętrzny usługi
|
||||||
|
|
||||||
|
Opis metod
|
||||||
229
docs/rent-api-01-autoryzacja-i-flota.md
Normal file
229
docs/rent-api-01-autoryzacja-i-flota.md
Normal file
@@ -0,0 +1,229 @@
|
|||||||
|
# Softra Rent API - Transkrypcja: Autoryzacja i flota
|
||||||
|
|
||||||
|
> ?r?d?o: "Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf"
|
||||||
|
|
||||||
|
1. Generowanie tokena JWT
|
||||||
|
Opis: Generuje token za JWT dla przesłanego loginu i hasła
|
||||||
|
URL : /account/auth
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki: Brak
|
||||||
|
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
login Identyfikator użytkownika String Parametr
|
||||||
|
wymagany
|
||||||
|
|
||||||
|
password hasło String Parametr
|
||||||
|
wymagany
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt LoginResponse
|
||||||
|
|
||||||
|
Obiekt LoginResponse
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
token token JWT String ważny 1h
|
||||||
|
|
||||||
|
2. Pobranie listy oddziałów
|
||||||
|
|
||||||
|
Opis: pobiera listę dostępnych odziałów
|
||||||
|
Url : /branch/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry:
|
||||||
|
Brak
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List<Branch>
|
||||||
|
|
||||||
|
Obiekt Branch
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
name symbol oddziału String
|
||||||
|
description opis oddziału String
|
||||||
|
zipCode kod pocztowy String
|
||||||
|
street ulica String
|
||||||
|
city miejscowość String
|
||||||
|
voivodeship województwo String
|
||||||
|
openingTime godziny otwarcia - dni robocze String
|
||||||
|
closingTime godziny zamknięcia – dni robocze String
|
||||||
|
isVirtual czy oddział wirtualny Boolean
|
||||||
|
email adres email oddziału String
|
||||||
|
phoneNo numer telefonu odziału String
|
||||||
|
relatedBranchName symbol oddziału powiązanego String
|
||||||
|
openingTimeSaturday godziny otwarcia - soboty String
|
||||||
|
closingTimeSaturday godziny zamknięcia - soboty String
|
||||||
|
openingTimeSunday godziny otwarcia - niedziele String
|
||||||
|
closingTimeSunday godziny zamknięcia - niedziele String
|
||||||
|
|
||||||
|
3. Pobranie listy dostępnych klas pojazdów
|
||||||
|
|
||||||
|
Opis: zwraca listę kategorii pojazdów dostępnych we wskazanym oddziale i okresie
|
||||||
|
spełniających określone warunki klienta ( np. rodzaj skrzyni biegów)
|
||||||
|
URL : /car/class/list
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
dateFrom data początku wynajmu w
|
||||||
|
formacie w formacie YYYY-MM-
|
||||||
|
DDTHHT24:MI:SS np 2014-10-
|
||||||
|
10T00:00:00
|
||||||
|
String TAK
|
||||||
|
dateTo data końca wynajmu w formacie
|
||||||
|
YYYY-MM-DDTHH24:MI:SS np
|
||||||
|
2014-10-10T00:00:00
|
||||||
|
String TAK
|
||||||
|
branchName symbol oddziału String TAK
|
||||||
|
fuelType rodzaj paliwa 'DIESEL', 'NPB', 'LPG' String NIE
|
||||||
|
carBodyType rodzaj pojazdu String NIE
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< String > , gdzie każdy element to symbol klasy pojazdu
|
||||||
|
|
||||||
|
4. Pobranie listy dostępnych marek i modeli w danej klasie i
|
||||||
|
oddziale
|
||||||
|
|
||||||
|
Opis: zwraca listę dostępnych marek i modeli w danej klasie pojazdów w danym oddziale na
|
||||||
|
podany dzień początku najmu spełniających określone warunki klienta
|
||||||
|
URL : /car/model/list
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Paremetry GET: includeBrandDetails true/false (opcjonalny)
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
dateFrom data początku wynajmu w
|
||||||
|
formacie w formacie YYYY-MM-
|
||||||
|
DDTHH24:MI:SS np 2014-10-
|
||||||
|
10T00:00:00
|
||||||
|
String TAK
|
||||||
|
dateTo data końca wynajmu w formacie
|
||||||
|
YYYY-MM-DDTHH24:MI:SS np
|
||||||
|
2014-10-10T00:00:00
|
||||||
|
String TAK
|
||||||
|
branchName symbol oddziału String TAK
|
||||||
|
category kategoria pojazdu, - empty string
|
||||||
|
zwróci listę dostępnych modeli dla
|
||||||
|
wszystkich klas pojazdów
|
||||||
|
String NIE
|
||||||
|
fuelType rodzaj paliwa 'DIESEL', 'NPB', 'LPG' String NIE
|
||||||
|
carBodyType rodzaj pojazdu String NIE
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< CarModel >
|
||||||
|
|
||||||
|
Obiekt CarModel
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
branchName symbol oddziału String
|
||||||
|
bodyType rodzaj nadwozia String
|
||||||
|
category kategoria String
|
||||||
|
doorCount ilość drzwi Integer
|
||||||
|
gearboxType rodzaj skrzyni biegów String
|
||||||
|
seatCount ilość miejsc Integer
|
||||||
|
fuelType rodzaj paliwa String
|
||||||
|
bagCount Ilosć walizek Integer
|
||||||
|
brandDesc Opis marki String Zwracany gdy
|
||||||
|
includeBrandDetails
|
||||||
|
=true
|
||||||
|
|
||||||
|
modelDesc Opis modelu String Zwracany gdy
|
||||||
|
includeBrandDetails
|
||||||
|
=true
|
||||||
|
|
||||||
|
5. Pobranie cen
|
||||||
|
|
||||||
|
Opis: zwraca ceny dla wskazanej kategorii pojazdów w raz z listą dostępnych dodatków i ich
|
||||||
|
cenami dla podanego okresu wynajmu
|
||||||
|
URL : /pricelist/list
|
||||||
|
Typ metody : POST
|
||||||
|
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
category kategoria pojazdu, empty string
|
||||||
|
wróci listę dostępnych cenników
|
||||||
|
dla wszystkich klas pojazdów
|
||||||
|
String NIE
|
||||||
|
dateFrom data początku najmu w formacie
|
||||||
|
YYYY-MM-DDTHHT24:MI:SS
|
||||||
|
|
||||||
|
String TAK
|
||||||
|
dateTo data końca najmu w formacie
|
||||||
|
YYYY-MM-DDTHHT24:MI:SS
|
||||||
|
String TAK
|
||||||
|
pickUpLocation miejsce wydania (symbol odziału) String TAK
|
||||||
|
language język String TAK
|
||||||
|
currency Waluta String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< PriceList >
|
||||||
|
|
||||||
|
Obiekt PriceList
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
id identyfikator cennika String
|
||||||
|
dateFrom data początku
|
||||||
|
obowiązywania cennika
|
||||||
|
String
|
||||||
|
dateTo data końca obowiązywania
|
||||||
|
cennika
|
||||||
|
String
|
||||||
|
kind rodzaj cennika String ['standard',
|
||||||
|
'weekend',
|
||||||
|
'specjalny']
|
||||||
|
|
||||||
|
name nazwa cennika String
|
||||||
|
carCategory kategoria pojazdu String
|
||||||
|
group grupa cennikowa String
|
||||||
|
odoLimit limit dzienny kilometrów BigDecmial
|
||||||
|
notes uwagi String
|
||||||
|
currency symbol waluty np. PLN, EUR String
|
||||||
|
type rodzaj kalkulacji Netto/Brutto String
|
||||||
|
number numer cennika String
|
||||||
|
isRes czy zaznaczona opcja okresu
|
||||||
|
rezerwacji
|
||||||
|
Boolean
|
||||||
|
resDateFrom data od kiedy dopuszczalna
|
||||||
|
rezerwacja
|
||||||
|
String
|
||||||
|
resDateTo data do kiedy dopuszczalna
|
||||||
|
rezerwacja
|
||||||
|
String
|
||||||
|
depositValue wysokość kaucji BigDecmial
|
||||||
|
|
||||||
|
milageOverLimitCost koszt kilometra nadprzebiegu BigDecmial
|
||||||
|
fuelLackCost koszt niedotankowanego
|
||||||
|
paliwa za litr
|
||||||
|
BigDecmial
|
||||||
|
returnDelayCost koszt opoźnienia zwrotu za
|
||||||
|
dobę
|
||||||
|
BigDecmial
|
||||||
|
carDamageFullValue opłata za szkodę całkowitą BigDecmial
|
||||||
|
carDamagePartlyValue opłata za szkodę częściową BigDecmial
|
||||||
|
rentPrice Opłata za dobę wynajmu BigDecmial
|
||||||
|
rentMinPrice Minimalna opłata za dobę
|
||||||
|
wynajmu
|
||||||
|
BigDecmial
|
||||||
|
rentDescription Opis usługi najmu String
|
||||||
|
rentUnit jednostka miary String
|
||||||
|
additionalItems lista zadeklarowanych
|
||||||
|
elementów dodatkowych
|
||||||
|
wraz z ceną
|
||||||
|
List<AddItem>
|
||||||
|
|
||||||
|
Obiekt AddItem:
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
id identyfikator usługi dodatkowej String
|
||||||
|
name nazwa usługi dodatkowej String
|
||||||
|
unit jednostka miary String
|
||||||
|
price cena jednostkowa BigDecmial
|
||||||
|
minPrice minimalna cena jednostkowa BigDecmial
|
||||||
|
maxQuanityOnPrincing maksymalna ilość dodatków na
|
||||||
|
wycenie
|
||||||
|
Integer
|
||||||
|
code Symbol opłaty String
|
||||||
431
docs/rent-api-02-klienci-i-konta.md
Normal file
431
docs/rent-api-02-klienci-i-konta.md
Normal file
@@ -0,0 +1,431 @@
|
|||||||
|
# Softra Rent API - Transkrypcja: Klienci i konta
|
||||||
|
|
||||||
|
> ?r?d?o: "Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf"
|
||||||
|
|
||||||
|
6. Utworzenie klienta
|
||||||
|
|
||||||
|
Opis: Tworzy obiekt klienta
|
||||||
|
URL : /customer/add
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
name pełna nazwa klienta String(180) TAK
|
||||||
|
address Adres zamieszkania CustomerAddress TAK
|
||||||
|
bankAccount Nazwa banku I nr
|
||||||
|
konta bankowego
|
||||||
|
CustomerBank NIE
|
||||||
|
nip numer nip String(13) TAK -gdy
|
||||||
|
isCompany =
|
||||||
|
true
|
||||||
|
|
||||||
|
nipKind rodzaj nip jeden z
|
||||||
|
elementów
|
||||||
|
String NIE ['krajowy',
|
||||||
|
'unijny',
|
||||||
|
'pozaunijny']
|
||||||
|
|
||||||
|
nipCountry kraj w formacie ISO String(2) NIE
|
||||||
|
regon numer regon String(12) NIE
|
||||||
|
pesel nr PESEL String(11) TAK* gdy -gdy
|
||||||
|
isCompany =
|
||||||
|
false
|
||||||
|
|
||||||
|
krs numer krs String(20) NIE
|
||||||
|
country Kraj I kod kraju CustomerCountry NIE
|
||||||
|
|
||||||
|
phone nr telefonu
|
||||||
|
stacjonarnego
|
||||||
|
String(60) NIE
|
||||||
|
email adres email String(50) NIE
|
||||||
|
www adres strony www String(60) NIE
|
||||||
|
paymentMethod metoda płatności String(10) TAK
|
||||||
|
[ 'GOTÓWKA',
|
||||||
|
'PRZELEW',
|
||||||
|
'KARTA PL.' ]
|
||||||
|
|
||||||
|
paymentDays ilość dni zapłaty Integer TAK -gdy
|
||||||
|
payment
|
||||||
|
metod =
|
||||||
|
PRZELEW
|
||||||
|
|
||||||
|
notes uwagi String(255) NIE
|
||||||
|
phoneMobile telefon komórkowy String(20) NIE
|
||||||
|
discountGroup nazwa grupy
|
||||||
|
rabatowej
|
||||||
|
String(10) NIE
|
||||||
|
isForeign czy klient
|
||||||
|
zagraniczny
|
||||||
|
Boolean NIE [‘T’, ‘N’]
|
||||||
|
domyślna
|
||||||
|
wartość ‘N’
|
||||||
|
|
||||||
|
isCompany czy klient to firma Boolean TAK [‘T’, ‘N’]
|
||||||
|
priceListGroup grup cennikowa
|
||||||
|
klienta
|
||||||
|
String(10) NIE
|
||||||
|
firstName imię String(20) TAK* gdy -gdy
|
||||||
|
isCompany =
|
||||||
|
false
|
||||||
|
|
||||||
|
lastName nazwisko String(30) TAK* gdy -gdy
|
||||||
|
isCompany =
|
||||||
|
false
|
||||||
|
|
||||||
|
idCard Dowod osobisty CustomerIdDoc TAK* gdy -gdy
|
||||||
|
isCompany =
|
||||||
|
false
|
||||||
|
|
||||||
|
correspAddress Adres
|
||||||
|
korespondencyjny
|
||||||
|
CustomerAddress NIE
|
||||||
|
birthDate data urodzenia nie
|
||||||
|
wymagane w
|
||||||
|
formacie YYYY-MM-
|
||||||
|
DDTHH24:MI:SS np
|
||||||
|
2014-10-
|
||||||
|
10T00:00:00
|
||||||
|
String NIE
|
||||||
|
birthCity miejsce urodzenia String(30) NIE
|
||||||
|
creditCard Dane karty
|
||||||
|
kredytowej
|
||||||
|
CustomerCreditCard NIE
|
||||||
|
passportNo numer paszportu String(20) TAK* gdy -gdy
|
||||||
|
isCompany =
|
||||||
|
false
|
||||||
|
|
||||||
|
driveLicence Prawo jazdy CustomerDriveLicence NIE
|
||||||
|
|
||||||
|
groupCode kod grupy klienta String(10) NIE
|
||||||
|
account Login I hasło klienta CustomerAccount TAK
|
||||||
|
bookKeeping Dane dot.
|
||||||
|
ksiegowości
|
||||||
|
CustomerBookKeeping NIE
|
||||||
|
skipAccountCreate tworzy klienta z
|
||||||
|
flagą klient
|
||||||
|
niezarejestrowany
|
||||||
|
( nie zostanie
|
||||||
|
utworzone konto
|
||||||
|
klienta )
|
||||||
|
Boolean NIE [‘T’ ‘N’]
|
||||||
|
domyślnie ‘N’
|
||||||
|
|
||||||
|
emailVerified Zweryfikowany
|
||||||
|
email
|
||||||
|
Boolean TAK
|
||||||
|
extCustomerId identyfikator klienta
|
||||||
|
z systemu
|
||||||
|
zewnętrznego
|
||||||
|
Integer NIE
|
||||||
|
|
||||||
|
language kod językowy – pl,
|
||||||
|
en, ru itp
|
||||||
|
String(2) NIE
|
||||||
|
|
||||||
|
*W przypadku klienta będącego osobą ficzyną (isCompany = false) wymgane uzupełnienie
|
||||||
|
jednego z pól pesel, passport_no, id_card
|
||||||
|
|
||||||
|
CustomerAddress
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
zipCode kod pocztowy String(10) TAK
|
||||||
|
city miejscowość String(30) TAK
|
||||||
|
street ulica String(60) TAK
|
||||||
|
homeNo Nr domu/ mieszkania String(20) TAK
|
||||||
|
|
||||||
|
CustomerBank
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
bankName nazwa banku String(60) NIE
|
||||||
|
bankAccountNo numer konta bankowego String(60) NIE
|
||||||
|
|
||||||
|
CustomerCountry
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
countryName nazwa kraju Strnig(40) NIE
|
||||||
|
countryCode kod kraju String(2) NIE
|
||||||
|
|
||||||
|
CustomerIdDoc
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
idCardNo nr dowodu osobistego String(20) TAK* gdy -gdy
|
||||||
|
isCompany =
|
||||||
|
false
|
||||||
|
|
||||||
|
idCardReleasedBy jednostka wydająca d.o. String(50) NIE
|
||||||
|
|
||||||
|
CustomerCreditCard
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
cardIssuer nazwa karty kredytowej (VISA,
|
||||||
|
MASTERCARD)
|
||||||
|
String(20) NIE
|
||||||
|
cardNo numer karty kredytowej (numer
|
||||||
|
wraz z separatorami)
|
||||||
|
String(20) NIE
|
||||||
|
cardValidTo miesiąc I rok ważdności MM/RR String(5) NIE
|
||||||
|
|
||||||
|
CustomerDriveLicence
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
licenceNo numer prawa jazdy String(20) NIE
|
||||||
|
|
||||||
|
licenceReleasedBy organ wydający prawo jazdy String(50) NIE
|
||||||
|
licenceCategory kategoria prawa jazdy String(10) NIE
|
||||||
|
|
||||||
|
CustomerAccount
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
login login do konta String(100) TAK
|
||||||
|
password Hasło do konta String(100) TAK
|
||||||
|
|
||||||
|
CustomerBookKeeping
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
name nazwa firmy prowadzącej
|
||||||
|
księgowość
|
||||||
|
String(120) NIE
|
||||||
|
zipCode kod pocztowy firmy prowadzącej
|
||||||
|
księgowość
|
||||||
|
String(10) NIE
|
||||||
|
city miejscowość firmy prowadzącej
|
||||||
|
księgowość
|
||||||
|
String(30) NIE
|
||||||
|
street ulica firmy prowadzącej
|
||||||
|
księgowość
|
||||||
|
String(60) NIE
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu NewCustomerResponse
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
customerId identyfikator klienta String
|
||||||
|
|
||||||
|
7. Pobranie danych klienta
|
||||||
|
Opis: Pobiera dane klienta dla wskazanego identyfikatora klienta
|
||||||
|
URL : /customer/item/{id}
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
id identyfikator klienta z
|
||||||
|
systemu FLOTA
|
||||||
|
String
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu Customer
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych
|
||||||
|
id Id w systemie Flota String
|
||||||
|
name pełna nazwa klienta String(180)
|
||||||
|
address Adres zamieszkania CustomerAddress
|
||||||
|
bankAccount Nazwa banku I nr konta
|
||||||
|
bankowego
|
||||||
|
CustomerBank
|
||||||
|
nip numer nip String(13)
|
||||||
|
nipKind rodzaj nip jeden z
|
||||||
|
elementów
|
||||||
|
String
|
||||||
|
nipCountry kraj w formacie ISO String(2)
|
||||||
|
regon numer regon String(12)
|
||||||
|
pesel nr PESEL String(11)
|
||||||
|
krs numer krs String(20)
|
||||||
|
country Kraj I kod kraju CustomerCountry
|
||||||
|
|
||||||
|
phone nr telefonu
|
||||||
|
stacjonarnego
|
||||||
|
String(60)
|
||||||
|
email adres email String(50)
|
||||||
|
www adres strony www String(60)
|
||||||
|
paymentMethod metoda płatności String(10)
|
||||||
|
paymentDays ilość dni zapłaty Integer
|
||||||
|
notes uwagi String(255)
|
||||||
|
phoneMobile telefon komórkowy String(20)
|
||||||
|
discountGroup nazwa grupy rabatowej String(10)
|
||||||
|
isForeign czy klient zagraniczny Boolean
|
||||||
|
isCompany czy klient to firma Boolean
|
||||||
|
priceListGroup grup cennikowa klienta String(10)
|
||||||
|
firstName imię String(20)
|
||||||
|
lastName nazwisko String(30)
|
||||||
|
idCard Dowod osobisty CustomerIdDoc
|
||||||
|
correspAddress Adres korespondencyjny CustomerAddress
|
||||||
|
birthDate data urodzenia nie
|
||||||
|
wymagane w formacie
|
||||||
|
YYYY-MM-
|
||||||
|
DDTHH24:MI:SS np
|
||||||
|
2014-10-10T00:00:00
|
||||||
|
String
|
||||||
|
birthCity miejsce urodzenia String(30)
|
||||||
|
creditCard Dane karty kredytowej CustomerCreditCard
|
||||||
|
passportNo numer paszportu String(20)
|
||||||
|
|
||||||
|
driveLicence Prawo jazdy CustomerDriveLicence
|
||||||
|
|
||||||
|
groupCode kod grupy klienta String(10)
|
||||||
|
account Login I hasło klienta CustomerAccount
|
||||||
|
bookKeeping Dane dot. ksiegowości CustomerBookKeeping
|
||||||
|
skipAccountCreate tworzy klienta z flagą
|
||||||
|
klient niezarejestrowany
|
||||||
|
( nie zostanie utworzone
|
||||||
|
konto klienta )
|
||||||
|
Boolean
|
||||||
|
emailVerified Zweryfikowany email Boolean
|
||||||
|
extCustomerId identyfikator klienta z
|
||||||
|
systemu zewnętrznego
|
||||||
|
Integer
|
||||||
|
language kod językowy – pl, en, ru
|
||||||
|
itp
|
||||||
|
String(2)
|
||||||
|
|
||||||
|
8. Aktualizacja danych klienta
|
||||||
|
Opis: Aktualizuje dane istniejącego klienta
|
||||||
|
URL : /customer/update
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Obiekt typu Customer
|
||||||
|
|
||||||
|
Zalecana strategia: pobieramy obiekt istniejącego klienta metodą GetCustomer ,
|
||||||
|
aktualizujemy jego właściwości i przekazujemy do metody UpdateCustomer
|
||||||
|
|
||||||
|
16. Sprawdzenie poświadczeń klienta
|
||||||
|
|
||||||
|
Opis: Metoda sprawdza czy dane do logowanie są prawidłowe
|
||||||
|
URL : /customer/account/check
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
login login do konta klienta String TAK
|
||||||
|
password hasło do konta klienta String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu AcountCheckResult
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
customerId Id klienta String
|
||||||
|
emailVerified Email zweryfikowany Boolean
|
||||||
|
|
||||||
|
17. Tworzenie tokena do zmiany hasła konta klienta
|
||||||
|
Opis: Metoda tworzy token niezbędny do zmiany hasła
|
||||||
|
URL : /customer/account/password/token
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
login login do konta klienta String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu RestPwdToken
|
||||||
|
|
||||||
|
Obiekt RestPwdToken
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
token Token String Ważny 30
|
||||||
|
minut
|
||||||
|
|
||||||
|
18. Zmiana hasła konta klienta
|
||||||
|
|
||||||
|
Opis: Metoda zmienia hasło konta klienta przy pomocy wcześniej utworzonego tokenu
|
||||||
|
URL : /customer/account/password/change
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Parametry JSON Object
|
||||||
|
Nazwa pola Opis pola Typ danych Wymagalność
|
||||||
|
token tokenValue otrzymany z
|
||||||
|
metody
|
||||||
|
/customer/account/password/token
|
||||||
|
String TAK
|
||||||
|
newPassword nowe hasło String TAK
|
||||||
|
|
||||||
|
Odpowiedź :
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
|
||||||
|
21. Pobieranie definicji oświadczeń/zgód marketingowych
|
||||||
|
|
||||||
|
Opis: Metoda zwraca listę definicji zgód marketingowych/oświadczeń
|
||||||
|
URL : /agreement/def/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List<AgrementDefItem>
|
||||||
|
|
||||||
|
Obiekt AgrementDefItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
id id oświadczenia String
|
||||||
|
isRequired czy wymagana Boolean
|
||||||
|
description treść zgody String
|
||||||
|
|
||||||
|
22. Sprawdzenie czy istnieje konto dla podanego loginu
|
||||||
|
|
||||||
|
Opis: Sprawdza czy istnieje konto klienta dla podanego loginu
|
||||||
|
URL : /customer/account/check/exists
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ
|
||||||
|
danych
|
||||||
|
Wymagalność
|
||||||
|
login login do konta klienta String TAK
|
||||||
|
|
||||||
|
Odpowiedź :
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
|
||||||
|
27. Wysłanie tokenu potwierdzający email dla podanego loginu
|
||||||
|
klienta
|
||||||
|
|
||||||
|
Opis: Wysyła token potwierdzający email – dla podanego loginu klienta
|
||||||
|
URL : /customer/account/email/sendConfirmToken
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
customerId id klienta String TAK
|
||||||
|
|
||||||
|
Odpowiedź :
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
|
||||||
|
28. Potwierdzenie adresu email klienta
|
||||||
|
|
||||||
|
Opis: Ustawia flagę potwierdząjącą adres email klienta
|
||||||
|
URL : /customer/account/email/confirm
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
token token klienta String TAK
|
||||||
|
|
||||||
|
Odpowiedź :
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
422
docs/rent-api-03-rezerwacje-i-platnosci.md
Normal file
422
docs/rent-api-03-rezerwacje-i-platnosci.md
Normal file
@@ -0,0 +1,422 @@
|
|||||||
|
# Softra Rent API - Transkrypcja: Rezerwacje i p?atno?ci
|
||||||
|
|
||||||
|
> ?r?d?o: "Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf"
|
||||||
|
|
||||||
|
9. Utworzenie rezerwacji
|
||||||
|
|
||||||
|
Opis: Rezerwacja wstępna pojazdu na X minut dla wybranej kategorii pojazdu, okresu najmu,
|
||||||
|
określonych warunków klienta ewentualnie podanej marki i modelu pojazdu, wraz podaną
|
||||||
|
listą dodatków wyposażenia. Zwraca numer rezerwacji.
|
||||||
|
URL : /rent/makebooking
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
dateFrom data początku najmu YYYY-
|
||||||
|
MM-DDTHH24:MI:SS
|
||||||
|
String TAK
|
||||||
|
dateTo data końca najmu YYYY-MM-
|
||||||
|
DDTHH24:MI:SS
|
||||||
|
String TAK
|
||||||
|
customerId identyfikator klienta String TAK
|
||||||
|
payerId identyfikator płatnika String NIE
|
||||||
|
pickUpLocation Miejsce/adres wydania
|
||||||
|
pojazdu
|
||||||
|
RentLocation TAK
|
||||||
|
pickUpComments uwagi dot. podstawienia String(50) NIE
|
||||||
|
pickUpCommentsEx uwagi dot. faktycznego
|
||||||
|
podstawienia
|
||||||
|
String(255) NIE
|
||||||
|
returnLocation Miejsce/adres odbiotu
|
||||||
|
pojazdu
|
||||||
|
RentLocation TAK
|
||||||
|
returnComments uwagi dot. odbioru String(50) NIE
|
||||||
|
returnCommentsEx uwagi dot. faktycznego
|
||||||
|
odbioru
|
||||||
|
String(255) NIE
|
||||||
|
carParameters Parametry pojazdu CarParameters TAK
|
||||||
|
priceListId identyfikator cennika String TAK
|
||||||
|
depositValue wysokość kaucji BigDecimal NIE
|
||||||
|
validTime ilość minut określająća czas
|
||||||
|
po którym rezerwacja
|
||||||
|
zostanie anulowana w
|
||||||
|
systuacji gdy nie zostanie
|
||||||
|
dokonana płatność (nie
|
||||||
|
nastąpi wywołanie meotdy
|
||||||
|
rent/confirm). API cyklicznie
|
||||||
|
(co 5 minut) sprawdza i
|
||||||
|
anuluje nie opłacone
|
||||||
|
rezerwacje po przekroczeniu
|
||||||
|
limitu określonego przez
|
||||||
|
parametr valid_time
|
||||||
|
Integer TAK
|
||||||
|
priceItems lista usług dodatkowych List<BookingPriceItem> NIE
|
||||||
|
drivers lista kierowców List<DriverItem> NIE
|
||||||
|
agreementItems lista zgód
|
||||||
|
marketingowych/oświadczeń
|
||||||
|
zaznaczonych przez klienta
|
||||||
|
List<AgreementItem> NIE
|
||||||
|
|
||||||
|
comments Uwagi do rezerwacji String(500) NIE
|
||||||
|
|
||||||
|
Obiekt RentLocation:
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
branchName Symbol oddziału String(10) TAK
|
||||||
|
outOfBranch jedna z wartości: [‘N’, ‘A’, ‘P’]
|
||||||
|
'N' - brak podstawienia/zwrotu pod
|
||||||
|
adres,
|
||||||
|
String(1) TAK
|
||||||
|
|
||||||
|
'A' – podstawienie/zwrot pod
|
||||||
|
adres,
|
||||||
|
'P' - punkt z listy oddziałów
|
||||||
|
address Podstawienei/zwrot pod adres String(100) TAK/NIE
|
||||||
|
pointName Podstawienie/zwrot do puktu.
|
||||||
|
Punkt
|
||||||
|
String(10) TAK/NIE
|
||||||
|
|
||||||
|
Obiekt CarParameters:
|
||||||
|
Nazwa pola Opis pola Typ danych Wymagalność
|
||||||
|
brand Marka pojazdu String(40) NIE
|
||||||
|
model Model pojazdu String(40) NIE
|
||||||
|
categoryName Klasa pojazdu String(10) TAK
|
||||||
|
gearBoxType Rodzaj skrzyni biegów String(10) NIE
|
||||||
|
bodyType Rodzaj nadwozia String(10) NIE
|
||||||
|
seatCount Ilość miejsc Integer NIE
|
||||||
|
doorCount Ilość drzwi Integer NIE
|
||||||
|
bagCount Ilość walizek Integer NIE
|
||||||
|
drivingGearType Rodzaj napędu String(10) NIE
|
||||||
|
fuelType Rodzaj paliwa String(10) NIE
|
||||||
|
group Grupa modelowa pojazdu String(10) NIE
|
||||||
|
|
||||||
|
Obiekt BookingPriceItem:
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Wymagalność
|
||||||
|
id idetyfikator elementu usługi
|
||||||
|
dodatkowej
|
||||||
|
String TAK
|
||||||
|
name nazwa usługi dodatkowej String(50) TAK
|
||||||
|
unit jednostka miary usługi
|
||||||
|
dodatkowej
|
||||||
|
String(10) TAK
|
||||||
|
amount ilość BigDecmial TAK
|
||||||
|
priceBeforeDiscount cena przed rabatem BigDecmial TAK
|
||||||
|
discount wysokosc rabatu BigDecmial TAK
|
||||||
|
priceAfterDiscount cena po rabacie BigDecmial TAK
|
||||||
|
|
||||||
|
Obiekt DriverItem:
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Wyamgalność
|
||||||
|
firstName imię String(20) TAK
|
||||||
|
lastName nazwisko String(30) TAK
|
||||||
|
address adres DriverAddress TAK
|
||||||
|
pesel PESEL String(11) TAK
|
||||||
|
phone telefon String(60) NIE
|
||||||
|
phoneMobile telefon kom. String(60) NIE
|
||||||
|
email e-mail String(50) NIE
|
||||||
|
idCard dane dot.
|
||||||
|
dowodu os.
|
||||||
|
CustomerIdDoc NIE
|
||||||
|
passportNo numer paszportu String(20) NIE
|
||||||
|
driveLicence dane dot prawa
|
||||||
|
jazdy
|
||||||
|
CustomerDriveLicence NIE
|
||||||
|
country kraj String(10) NIE
|
||||||
|
birthDate data urodzenia
|
||||||
|
format YYYY-
|
||||||
|
MM-DD
|
||||||
|
HH24:MI:SS
|
||||||
|
String NIE
|
||||||
|
birthCity miejsce
|
||||||
|
urodzenia
|
||||||
|
String(30) NIE
|
||||||
|
|
||||||
|
Obiekt DriverAddress:
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
city miejscowość String(30) TAK
|
||||||
|
zipCode kod pocztowy String(10) TAK
|
||||||
|
street ulica String(60) TAK
|
||||||
|
|
||||||
|
Obiekt AgreementItem:
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
id dentyfiaktor oświadczenia (patrz
|
||||||
|
metoda GetAgreementsDefList)
|
||||||
|
String TAK
|
||||||
|
value Zgoda /brak zgody Boolean TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu BookingResult
|
||||||
|
|
||||||
|
Obiekt BookingResult
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
|
||||||
|
success Sukces/Bąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String CAR_NOT_FOUND
|
||||||
|
reservationId identyfikator rezerwacji String
|
||||||
|
reservationNo numer rezerwacji String
|
||||||
|
grossValue wartość brutto rezerwacji wraz z
|
||||||
|
kaucją
|
||||||
|
BigDecimal
|
||||||
|
|
||||||
|
10. Dodanie klienta do istniejącej rezerwacji
|
||||||
|
Opis: Dodaje klienta do istniejącej rezerwacji ( przypadek z rezerwacją na klienta
|
||||||
|
anonimowego)
|
||||||
|
URL : /customer/addToReservation
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
customerId identyfikator klienta z systermu
|
||||||
|
Flota. Parametr customer_id
|
||||||
|
otrzymujemy metodą GetCustomer
|
||||||
|
lub AddCustomer
|
||||||
|
String TAK
|
||||||
|
reservationId identyfikator rezerwacji String TAK
|
||||||
|
|
||||||
|
Odpowiedź :
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
|
||||||
|
11. Potwierdzenie rezerwacji
|
||||||
|
Opis: Zmienia rezerwację na potwierdzoną
|
||||||
|
URL : /rent/confirm
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
reservationId identyfikator rezerwacji String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu ConfirmResult
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
|
||||||
|
12. Anulowanie rezerwacji
|
||||||
|
Opis: Anuluje rezerwację dla podanego identyfikatora rezerwacji
|
||||||
|
URL : /rent/cancel
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Wymagalność
|
||||||
|
reservationId id wynajmu/rezerwacji String TAK
|
||||||
|
reason przyczyna anulowania String(255) TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu CancelBookingResponse
|
||||||
|
|
||||||
|
Obiekt CancelBookingResponse
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
success Sukces/Błąd Boolean
|
||||||
|
rejectReason Przyczyna niepowodzenia String
|
||||||
|
|
||||||
|
19. Podsumowanie opłat przed złożeniem rezerwacji
|
||||||
|
|
||||||
|
Opis: Metoda zwraca podsumowanie rezerwacji z elementami wyceny. W zwróconej
|
||||||
|
odpowiedzi mogą pojawiać się elementy dodatkowe - np. doliczona opłata za zwrot w innym
|
||||||
|
oddziale, opłata za obsługę po godzinach pracy itp.
|
||||||
|
URL : /rent/princingSummary
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
dateFrom data początku najmu String TAK
|
||||||
|
dateTo data końca najmu String TAK
|
||||||
|
customerId identyfikator klienta String TAK
|
||||||
|
payerId identyfikator płatnika String NIE
|
||||||
|
pickUpLocation Miejsce/adres
|
||||||
|
wydania pojazdu
|
||||||
|
RentLocation TAK
|
||||||
|
returnLocation Miejsce/adres odbiotu
|
||||||
|
pojazdu
|
||||||
|
RentLocation TAK
|
||||||
|
carParameters Parametry pojazdu CarParameters TAK
|
||||||
|
priceListId identyfikator cennika String TAK
|
||||||
|
depositValue wysokość kaucji BigDecimal NIE
|
||||||
|
priceItems lista usług
|
||||||
|
dodatkowych
|
||||||
|
List<BookingPriceItem> NIE
|
||||||
|
|
||||||
|
Obiekt BookingPriceItem:
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Wymagalność
|
||||||
|
id idetyfikator elementu usługi
|
||||||
|
dodatkowej
|
||||||
|
String TAK
|
||||||
|
name nazwa usługi dodatkowej String(50) TAK
|
||||||
|
unit jednostka miary usługi dodatkowej String(10) TAK
|
||||||
|
amount ilość BigDecmial TAK
|
||||||
|
priceBeforeDiscount cena przed rabatem BigDecmial TAK
|
||||||
|
|
||||||
|
dicount wysokosc rabatu BigDecmial TAK
|
||||||
|
priceAfterDiscount cena po rabacie BigDecmial TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu SummaryResponse
|
||||||
|
|
||||||
|
Obiekt SummaryResponse
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
totalNetValue wartość netto rezerwacji BigDecimal
|
||||||
|
totalVatValue wartość vat rezerwacji BigDecimal
|
||||||
|
totalGrossValue wartość brutto rezerwacji BigDecimal
|
||||||
|
pricelist lista elementów wyceny List<PriceItem>
|
||||||
|
|
||||||
|
Obiekt PriceItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
id id opłaty String
|
||||||
|
name nazwa opłaty String(50)
|
||||||
|
code symbol opłaty String
|
||||||
|
unit jednostka miary String(10)
|
||||||
|
amount ilość BigDecmial
|
||||||
|
priceBeforeDiscount cena przed rabatem BigDecmial
|
||||||
|
dicount wysokosc rabatu % BigDecmial
|
||||||
|
priceAfterDiscount cena po rabacie BigDecmial
|
||||||
|
netValue wartosc netto BigDecmial
|
||||||
|
vatRate stopa vat "23%" String
|
||||||
|
vatValue wartość vat BigDecmial
|
||||||
|
grossValue wartość brutto BigDecmial
|
||||||
|
addedBySystem true oznacza że jest to dodatkowa
|
||||||
|
opłata doliczona przez system z
|
||||||
|
automatu
|
||||||
|
Boolean
|
||||||
|
systemItemType rodzaj doliczonej automatycznie
|
||||||
|
opłaty:
|
||||||
|
1 - opłata za zwrot w innym
|
||||||
|
oddziale,
|
||||||
|
2 - wydanie auta po godzinach
|
||||||
|
pracy
|
||||||
|
3 - wydanie auta w godzinach
|
||||||
|
pracy
|
||||||
|
4 - zdanie auta po godzinach pracy
|
||||||
|
5 - zdanie auta w godzinach pracy
|
||||||
|
Integer
|
||||||
|
|
||||||
|
23. Dodawanie wpłat i kaucji do rezerwacji
|
||||||
|
|
||||||
|
Opis: Pozwala na dodawanie wpłat i kaucji do zamówienia/rezerwacji
|
||||||
|
URL : /rent/payment/add
|
||||||
|
Typ metody : POST
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Wymagalność
|
||||||
|
reservationId id zamówienia/rezerwacji String TAK
|
||||||
|
paymentDate data płatności String TAK
|
||||||
|
paymentMethod sposób płatności ['GOTÓWKA',
|
||||||
|
'PRZELEW', 'KARTA PŁ.', 'PREAUTORYZ',
|
||||||
|
'INNE']
|
||||||
|
String TAK
|
||||||
|
paymentType rodzaj płatności
|
||||||
|
['wpłata','kaucja','preautoryzacja','zaliczka
|
||||||
|
częściowa','zaliczka całkowita']
|
||||||
|
String TAK
|
||||||
|
currency symbol waluty String(3) TAK
|
||||||
|
grossValue kwota wpłaty w walucie BigDecimal TAK
|
||||||
|
paymentNo numer płatności String(20) NIE
|
||||||
|
paymentState „Do pobrania”, „Pobrano”, „Zwrócono” TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu PaymentAddResponse
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
paymentId Id utworzenego obiektu płatności
|
||||||
|
String
|
||||||
|
|
||||||
|
24. Pobieranie listy opłat dodatkowych dla podanej rezerwacji /
|
||||||
|
wynajmu
|
||||||
|
|
||||||
|
Opis: Zwraca listę opłat dodatkowych dla podanego id wynajmu/rezerwacji
|
||||||
|
URL : /rent/pricelist/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
rentId id wynajmu/rezerwacji String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< RentAdditionalPriceItem>
|
||||||
|
|
||||||
|
Obiekt RentAdditionalPriceItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
itemId id opłaty dodatkowej String
|
||||||
|
name nazwa opłaty dodatkowej String
|
||||||
|
nameCode symbol nazwy String
|
||||||
|
vatRate stopa va BigDecimal
|
||||||
|
symbolVat symbol vat String
|
||||||
|
amount ilość String
|
||||||
|
currency waluta String
|
||||||
|
netPrice cena netto BigDecimal
|
||||||
|
grossPrice cena brutto BigDecimal
|
||||||
|
unit jednostka miary String
|
||||||
|
discountValue wartość rabatu BigDecimal
|
||||||
|
discountPercent procent rabatu BigDecimal
|
||||||
|
netValue wartość netto BigDecimal
|
||||||
|
vatValue wartość vat BigDecimal
|
||||||
|
grossValue wartość brutto BigDecimal
|
||||||
|
payerShortName symbol płatnika String
|
||||||
|
|
||||||
|
25. Pobieranie listy wpłat dla podanej rezerwacji / wynajmu
|
||||||
|
|
||||||
|
Opis: Zwraca listę wpłat dla podanego id wynajmu/rezerwacji
|
||||||
|
URL : /rent/payment/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
rentId id wynajmu/rezerwacji String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< RentPaymentItem>
|
||||||
|
|
||||||
|
Obiekt RentPaymentItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
itemId Id wpłaty String
|
||||||
|
rentId id wynajmu/rezerwacji Integer
|
||||||
|
type rodzaj wpłat/kaucja/zaliczka itp String
|
||||||
|
comments uawgi String
|
||||||
|
date data wpłaty String
|
||||||
|
grossValue wartość brutto w walucie BigDecimal
|
||||||
|
paymentMethod metoda płatności String
|
||||||
|
paymentDirection Pobrano/Zwrócono/Do pobrania String
|
||||||
|
currency waluta String
|
||||||
|
grossPlnValue wartość brutto PLN BigDecimal
|
||||||
|
payerShortName symbol płatnika String
|
||||||
|
|
||||||
|
26. Dodawanie płatnika
|
||||||
|
|
||||||
|
Opis: Dodaje klienta (będącego płatnikiem) do kartoteki klientów w systemie Flota Rent
|
||||||
|
|
||||||
|
URL : /payer/add
|
||||||
|
Typ metody : POST
|
||||||
|
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
jak dla metody customer/add
|
||||||
|
|
||||||
|
Odpowiedź : taka jak dla metody customer/add
|
||||||
96
docs/rent-api-04-faktury-i-historia.md
Normal file
96
docs/rent-api-04-faktury-i-historia.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# Softra Rent API - Transkrypcja: Faktury i historia
|
||||||
|
|
||||||
|
> ?r?d?o: "Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf"
|
||||||
|
|
||||||
|
13. Pobieranie listy faktur dla rezerwacji
|
||||||
|
Opis: Zwraca listę faktur dla podanego identyfikatora zlecenia
|
||||||
|
URL : /invoice/rent/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
reservationId id rezerwacji w systemie Flota String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List<DocItem >
|
||||||
|
|
||||||
|
Obiekt DocItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
docId identfikator dokumentu String
|
||||||
|
docDate data wystawienia dokumentu String YYYY-MM-
|
||||||
|
DDTHH24:MI:SS
|
||||||
|
|
||||||
|
docType typ dokumentu: FAKTURA VAT,
|
||||||
|
KOREKTA VAT
|
||||||
|
String
|
||||||
|
docNo nr dokumentu String
|
||||||
|
docNetValue wartość netto BigDecimal
|
||||||
|
docVatValue wartość vat BigDecimal
|
||||||
|
docGrossValue wartość brutto BigDecimal
|
||||||
|
|
||||||
|
14. Pobieranie listy faktur związanych z klientem
|
||||||
|
Opis: Zwraca listę faktur dla podanego identyfikatora klienta
|
||||||
|
URL : /invoice/customer/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
customerId id klienta w systemie Flota String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< DocItem> (opisany w metodzie /invoice/rent/list )
|
||||||
|
|
||||||
|
15. Pobieranie dokumentu faktury
|
||||||
|
|
||||||
|
Opis: Zwraca plik faktury
|
||||||
|
URL : /invoice/item/{:id}
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
id id dokumentu w systemie Flota String TAK
|
||||||
|
|
||||||
|
Odpowiedź : http 200 ContentType = "application/octet-stream" (plik)
|
||||||
|
|
||||||
|
20. Pobieranie listy wynajmów i rezerwacji klienta
|
||||||
|
|
||||||
|
Opis: Metoda zwraca listę wydań i rezerwacji wybranego klienta
|
||||||
|
URL : /customer/rent/list
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
|
||||||
|
Przyjmowane parametry:
|
||||||
|
|
||||||
|
Nazwa Opis pola Typ danych Wymagalność
|
||||||
|
customerId Id klient w systemie Flota String TAK
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< RentItem>
|
||||||
|
|
||||||
|
Obiekt RentItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
rentId id wynajmu/rezerwacji String
|
||||||
|
dateFrom data początku String
|
||||||
|
dateTo data końca String
|
||||||
|
carRegNo nr rejestracyjny pojazdu String
|
||||||
|
carMark marka pojazdu String
|
||||||
|
carCategory kategoria pojazdu String
|
||||||
|
orderNo nr zlecenia String
|
||||||
|
agreementNo nr umowy String
|
||||||
|
currency waluta String
|
||||||
|
status Status wynajmu/rezerwacji-
|
||||||
|
'REZERWACJA', 'REZ. POTW',
|
||||||
|
'WYDANY', 'ZDANY', 'ODMOWA'
|
||||||
|
String
|
||||||
|
pickupLocation miejsce wydania String
|
||||||
|
returnLocation miejsce zdania String
|
||||||
|
totalNetValue wartosc netto w walucie BigDecimal
|
||||||
|
totalVatValue wartość vat BigDecimal
|
||||||
|
|
||||||
|
totalGrossValue wartość brutto BigDecimal
|
||||||
95
docs/rent-api-05-slowniki-i-uzgodnienia.md
Normal file
95
docs/rent-api-05-slowniki-i-uzgodnienia.md
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
# Softra Rent API - Transkrypcja: S?owniki i uzgodnienia wdro?eniowe
|
||||||
|
|
||||||
|
> ?r?d?o: "Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf"
|
||||||
|
|
||||||
|
29. Pobieranie wszystkich symboli klas
|
||||||
|
|
||||||
|
Opis: Zwraca wszystkie zdefiniowane klasy pojazdów w systemie
|
||||||
|
URL : /car/class/listAll
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry: Brak
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< String > , gdzie każdy element to symbol klasy pojazdu
|
||||||
|
|
||||||
|
30. Pobieranie wszystkich modeli pojazdów
|
||||||
|
|
||||||
|
Opis: Zwraca wszystkie zdefiniowane modele pojazdów w systemie
|
||||||
|
URL : /car/model/listAll
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Paremetry GET: includeBrandDetails true/false (opcjonalny)
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< CarModel > opisany w pkt 4.
|
||||||
|
|
||||||
|
31. Pobieranie listy opłat zadeklarowanych w systemie
|
||||||
|
|
||||||
|
Opis: Zwraca wszystkie zdefiniowane opłaty w sytemie które mogą użyte w cennikach
|
||||||
|
URL : /pricelist/defList
|
||||||
|
Typ metody : GET
|
||||||
|
Nagłówki:
|
||||||
|
"Authorization: Bearer [token]"
|
||||||
|
Parametry JSON Object
|
||||||
|
|
||||||
|
Przyjmowane parametry: Brak
|
||||||
|
|
||||||
|
Odpowiedź : Obiekt typu List< PriceItem > ,
|
||||||
|
|
||||||
|
Parametry PriceItem
|
||||||
|
|
||||||
|
Nazwa pola Opis pola Typ danych Uwagi
|
||||||
|
code Symbol opłaty String
|
||||||
|
description Nazwa opłaty String
|
||||||
|
|
||||||
|
32. Przykład uzgodnień wdrożeniowych
|
||||||
|
|
||||||
|
Przed przystąpieniem do wdrożenia zleceniodawca, wykonawca strony www i Softra
|
||||||
|
powinni:
|
||||||
|
- uzgodnić scenariusz obsługi klienta na stronie internetowej
|
||||||
|
- zweryfikować użycie metod API zgodnie z uzgodnionym scenariuszem
|
||||||
|
- uzgodnić ewentualne konieczne zmiany w API
|
||||||
|
|
||||||
|
Przykładowy scenariusz obsługi klienta na stronie www
|
||||||
|
|
||||||
|
Poniżej zamieszczono przykład scenariuszy użycia dla podstawowej wersji interface
|
||||||
|
SOFTRA_RENT_API.
|
||||||
|
Scenariusze obsługi klienta mogą być modyfikowane na potrzeby użytkownika systemu.
|
||||||
|
Poniższy scenariusz należy traktować tylko jako przykład.
|
||||||
|
Zakłada się dwa scenariusze użycia :
|
||||||
|
1. Dla nowego klienta
|
||||||
|
2. Dla klienta zarejestrowanego w systemie.
|
||||||
|
Fragmenty scenariusz specyficzne dla w/w rodzajów scenariusza zaznaczono kolorem.
|
||||||
|
|
||||||
|
1. Potencjalny klient wchodzi na stronę www wypożyczalni i dokonuje podaje okres
|
||||||
|
wynajmu oraz lokalizacje odbioru i zwrotu pojazdu
|
||||||
|
2. Następuje sprawdzenie dostępnych klas pojazdów spełniających w/w kreteria i
|
||||||
|
prezentacja możliwych do wyboru modeli wraz z cenami
|
||||||
|
3. Potencjalny klient wybiera klasę pojazdu oraz wskazuje opocjonalne elementy
|
||||||
|
wyposażenia lub usługi (foteliki , pakiety znoszące odpowiedzialnosć itp)
|
||||||
|
4. Następnie prezentowane jest podsumowanie oraz wybór czy klient chce:
|
||||||
|
- dokonać rezerwacji bez rejestracji (jako anonim)
|
||||||
|
- zalogować się na wcześniej utworzone konto
|
||||||
|
- utworzyć konto
|
||||||
|
4. Jeżeli klient wskaże ,że jest zarejestrowanym klientem strona www wysyła do
|
||||||
|
Softra_Rent_API dane uwierzytelniające klienta i następuje weryfikacja konta kloenta.
|
||||||
|
Softra_Rent_API zwraca potwierdzenie o statusie autoryzacji.
|
||||||
|
5. Jeśli klient wskaże ,że chce utworzyć konto lub składa rezerwację bez rejestracji to
|
||||||
|
zostanie proszony jest o wypełnienie formularza rejestracji danych klienta.
|
||||||
|
6. Klient następnie zatwierdza formularz rezerwacji i następuje złożenie rezerwacji.
|
||||||
|
7. Jeśli przy próbie rezerwacji system stwierdza brak samochodu następuje zapisanie
|
||||||
|
zamówienia i zgłoszenie informacji do operatora przez SMS o braku pojazdu.
|
||||||
|
9. Klient proszony jest o wykonanie płatności za rezerwację. Potwierdzenie wykonania
|
||||||
|
płatności wysyłane jest do Softra_Rent_API
|
||||||
|
10. Jeśli płatność została wykonana to status rezerwacji jest zmieniany na „Potwierdzone”
|
||||||
|
i wysyłany jest SMS oraz e-mail do wskazanego operatora systemu oraz e-mail
|
||||||
|
potwierdzający przyjęcie rezerwacji do klienta.
|
||||||
|
|
||||||
|
11. Jeśli płatność nie została wykonana w ciągu X minut to następuje zmiana statusu
|
||||||
|
rezerwacji na „Anulowano” powód „z winy klienta” Jeśli klient był zautoryzowany tzn. inny
|
||||||
|
niżto wysłany zostaje e-mail o anulowaniu rezerwacji.
|
||||||
10
docs/rent-api-transkrypcja-index.md
Normal file
10
docs/rent-api-transkrypcja-index.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Softra Rent API - Transkrypcja (podzia? na dzia?y)
|
||||||
|
|
||||||
|
- [00 - Wst?p i zasady](./rent-api-00-wstep-i-zasady.md)
|
||||||
|
- [01 - Autoryzacja i flota](./rent-api-01-autoryzacja-i-flota.md)
|
||||||
|
- [02 - Klienci i konta](./rent-api-02-klienci-i-konta.md)
|
||||||
|
- [03 - Rezerwacje i p?atno?ci](./rent-api-03-rezerwacje-i-platnosci.md)
|
||||||
|
- [04 - Faktury i historia](./rent-api-04-faktury-i-historia.md)
|
||||||
|
- [05 - S?owniki i uzgodnienia](./rent-api-05-slowniki-i-uzgodnienia.md)
|
||||||
|
|
||||||
|
Dokument ?r?d?owy: `Oferta 37 Softra_Rent_API - zaaczni k Specyfikacja_Rent_RESTAPI_1_15.pdf`
|
||||||
220
softra-test.php
Normal file
220
softra-test.php
Normal file
@@ -0,0 +1,220 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Softra API smoke test:
|
||||||
|
* 1) reads credentials from .env (format: "key: value")
|
||||||
|
* 2) authenticates (/account/auth)
|
||||||
|
* 3) fetches branches (/branch/list)
|
||||||
|
* 4) fetches car models (/car/model/list?includeBrandDetails=true)
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* php softra-test.php
|
||||||
|
* php softra-test.php branch=BYDGOSZCZ from=2026-03-30T12:00:00 to=2026-04-02T12:00:00 category=
|
||||||
|
*/
|
||||||
|
|
||||||
|
function fail(string $message, int $code = 1): never
|
||||||
|
{
|
||||||
|
if (PHP_SAPI !== 'cli') {
|
||||||
|
http_response_code(500);
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
echo json_encode(['ok' => false, 'error' => $message], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
|
||||||
|
exit($code);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined('STDERR')) {
|
||||||
|
fwrite(STDERR, $message . PHP_EOL);
|
||||||
|
} else {
|
||||||
|
echo $message . PHP_EOL;
|
||||||
|
}
|
||||||
|
exit($code);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseEnvFile(string $path): array
|
||||||
|
{
|
||||||
|
if (!is_file($path)) {
|
||||||
|
fail("Brak pliku .env: {$path}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
$lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||||
|
if ($lines === false) {
|
||||||
|
fail("Nie mogę odczytać pliku .env");
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($lines as $line) {
|
||||||
|
$line = trim($line);
|
||||||
|
if ($line === '' || str_starts_with($line, '#')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// supports:
|
||||||
|
// key: value
|
||||||
|
// key=value
|
||||||
|
$sepPos = strpos($line, ':');
|
||||||
|
if ($sepPos === false) {
|
||||||
|
$sepPos = strpos($line, '=');
|
||||||
|
}
|
||||||
|
if ($sepPos === false) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$key = trim(substr($line, 0, $sepPos));
|
||||||
|
$value = trim(substr($line, $sepPos + 1));
|
||||||
|
$value = trim($value, "\"'");
|
||||||
|
if ($key !== '') {
|
||||||
|
$result[strtolower($key)] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseInputArgs(?array $argv = null): array
|
||||||
|
{
|
||||||
|
$args = [];
|
||||||
|
|
||||||
|
if (PHP_SAPI === 'cli') {
|
||||||
|
$argv = $argv ?? [];
|
||||||
|
foreach (array_slice($argv, 1) as $arg) {
|
||||||
|
$pos = strpos($arg, '=');
|
||||||
|
if ($pos === false) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$k = strtolower(trim(substr($arg, 0, $pos)));
|
||||||
|
$v = trim(substr($arg, $pos + 1));
|
||||||
|
$args[$k] = $v;
|
||||||
|
}
|
||||||
|
return $args;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($_GET as $k => $v) {
|
||||||
|
if (!is_string($k)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$args[strtolower($k)] = is_string($v) ? trim($v) : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $args;
|
||||||
|
}
|
||||||
|
|
||||||
|
function requestJson(string $method, string $url, ?array $payload = null, array $headers = []): array
|
||||||
|
{
|
||||||
|
$ch = curl_init($url);
|
||||||
|
if ($ch === false) {
|
||||||
|
fail('Nie udało się zainicjować cURL');
|
||||||
|
}
|
||||||
|
|
||||||
|
$httpHeaders = array_merge(['Accept: application/json'], $headers);
|
||||||
|
if ($payload !== null) {
|
||||||
|
$httpHeaders[] = 'Content-Type: application/json';
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_setopt_array($ch, [
|
||||||
|
CURLOPT_CUSTOMREQUEST => strtoupper($method),
|
||||||
|
CURLOPT_RETURNTRANSFER => true,
|
||||||
|
CURLOPT_HTTPHEADER => $httpHeaders,
|
||||||
|
CURLOPT_TIMEOUT => 30,
|
||||||
|
CURLOPT_CONNECTTIMEOUT => 15,
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($payload !== null) {
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
|
||||||
|
}
|
||||||
|
|
||||||
|
$raw = curl_exec($ch);
|
||||||
|
$err = curl_error($ch);
|
||||||
|
$status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
if ($raw === false) {
|
||||||
|
fail("Błąd połączenia cURL: {$err}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$decoded = json_decode($raw, true);
|
||||||
|
if (!is_array($decoded)) {
|
||||||
|
$decoded = ['raw' => $raw];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'status' => $status,
|
||||||
|
'body' => $decoded,
|
||||||
|
'raw' => $raw,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$env = parseEnvFile(__DIR__ . DIRECTORY_SEPARATOR . '.env');
|
||||||
|
$args = parseInputArgs($argv ?? null);
|
||||||
|
|
||||||
|
$baseUrl = rtrim($env['url'] ?? '', '/');
|
||||||
|
$username = $env['username'] ?? '';
|
||||||
|
$password = $env['password'] ?? '';
|
||||||
|
|
||||||
|
if ($baseUrl === '' || $username === '' || $password === '') {
|
||||||
|
fail('W .env muszą być pola: url, username, password');
|
||||||
|
}
|
||||||
|
|
||||||
|
$authRes = requestJson('POST', $baseUrl . '/account/auth', [
|
||||||
|
'login' => $username,
|
||||||
|
'password' => $password,
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($authRes['status'] !== 200 || empty($authRes['body']['token'])) {
|
||||||
|
fail("Auth nieudany (HTTP {$authRes['status']}): {$authRes['raw']}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$token = (string) $authRes['body']['token'];
|
||||||
|
$authHeader = ['Authorization: Bearer ' . $token];
|
||||||
|
|
||||||
|
$branchesRes = requestJson('GET', $baseUrl . '/branch/list', null, $authHeader);
|
||||||
|
if ($branchesRes['status'] !== 200 || !is_array($branchesRes['body'])) {
|
||||||
|
fail("Pobranie oddziałów nieudane (HTTP {$branchesRes['status']}): {$branchesRes['raw']}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$branches = $branchesRes['body'];
|
||||||
|
if (count($branches) === 0) {
|
||||||
|
fail('API działa, ale /branch/list zwróciło pustą listę oddziałów');
|
||||||
|
}
|
||||||
|
|
||||||
|
$branch = $args['branch'] ?? ($branches[0]['relatedBranchName'] ?? $branches[0]['name'] ?? '');
|
||||||
|
if ($branch === '') {
|
||||||
|
fail('Nie udało się ustalić branchName (podaj ręcznie: branch=NAZWA)');
|
||||||
|
}
|
||||||
|
|
||||||
|
$from = $args['from'] ?? (new DateTimeImmutable('+7 days'))->format('Y-m-d\TH:i:s');
|
||||||
|
$to = $args['to'] ?? (new DateTimeImmutable('+10 days'))->format('Y-m-d\TH:i:s');
|
||||||
|
$category = $args['category'] ?? ''; // empty = all categories
|
||||||
|
|
||||||
|
$modelsRes = requestJson(
|
||||||
|
'POST',
|
||||||
|
$baseUrl . '/car/model/list?includeBrandDetails=true',
|
||||||
|
[
|
||||||
|
'dateFrom' => $from,
|
||||||
|
'dateTo' => $to,
|
||||||
|
'branchName' => $branch,
|
||||||
|
'category' => $category,
|
||||||
|
],
|
||||||
|
$authHeader
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($modelsRes['status'] !== 200 || !is_array($modelsRes['body'])) {
|
||||||
|
fail("Pobranie listy aut nieudane (HTTP {$modelsRes['status']}): {$modelsRes['raw']}");
|
||||||
|
}
|
||||||
|
|
||||||
|
$models = $modelsRes['body'];
|
||||||
|
|
||||||
|
$result = [
|
||||||
|
'ok' => true,
|
||||||
|
'baseUrl' => $baseUrl,
|
||||||
|
'branch' => $branch,
|
||||||
|
'dateFrom' => $from,
|
||||||
|
'dateTo' => $to,
|
||||||
|
'modelsCount' => count($models),
|
||||||
|
'models' => $models,
|
||||||
|
];
|
||||||
|
|
||||||
|
if (PHP_SAPI !== 'cli') {
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
|
||||||
Reference in New Issue
Block a user