Przejdź do głównej zawartości

Składanie zamówienia

Wywołanie złożenia zamówienia następuje, gdy użytkownik OpenApp potwierdza zamówienie i inicjowana jest płatność.

Widoczne jako krok 9 na diagramie sekwencji:

Żądanie

OpenApp wykona żądanie HTTP POST do endpointu skonfigurowanego w panelu merchanta, z informacją o zamówieniu w treści żądania. Jeśli skonfigurowano adres https://shop.example.com/api/openapp/order, żądanie wykonane przez OpenApp będzie wyglądać następująco:

POST https://shop.example.com/api/openapp/order

W treści żądania POST OpenApp umieści wszystkie dane wymagane do złożenia zamówienia. Zestaw danych zależy od metody dostawy wybranej przez użytkownika.

oaOrderId jednoznacznie identyfikuje zamówienie. Jeśli zamówienie zostanie złożone, a OpenApp nie otrzyma odpowiedzi w wystarczającym czasie, może ponowić żądanie - dlatego ważne jest, aby endpoint składania zamówienia był zaimplementowany w sposób idempotentny.

Dostawa do automatu paczkowego (APM)

W poniższym przykładzie użytkownik wybrał dostawę do skrytki automatu paczkowego. Wymagane informacje to identyfikator wybranego automatu oraz dane kontaktowe użytkownika do wysłania kodu odbioru przesyłki.

{
"oaOrderId": "OA12345678901234",
"basket": {
"id": "basket-id",
"price": {
"currency": "PLN",
"discounts": [
{
"code": "discount-code-text",
"value": 1000
}
],
"basketValue": 11000,
"deliveryCost": 100
},
"products": [
{
"ean": "12312",
"id": "id123",
"quantity": 2,
"unitPrice": 6000,
"linePrice": 12000
}
],
"loggedUser": "user-id-from-webshop"
},
"deliveryDetails": {
"type": "PICKUP",
"method": "INPOST_APM",
"subType": "APM",
"id": "WAW22A",
"name": "WAW22A",
"street": "Domaniewska",
"streetNo": "12A",
"postalCode": "02-654",
"city": "Warszawa",
"country": "PL",
"email": "id@o-app.pl",
"phoneNumber": "+48123123123"
},
"paymentDetails": {
"currency": "PLN",
"amount": 11000
},
"consents": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"version": 1
},
{
"id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"version": 2
}
]
}

Użytkownik nie zażądał faktury, więc tej informacji nie ma w żądaniu. Użytkownik korzysta ponadto z funkcji anonimizacji OpenApp, aby ukryć swój adres e-mail przed sprzedawcą. Sprzedawca nadal może wysyłać wiadomości e-mail do użytkownika, ponieważ adres e-mail udostępniony przez OpenApp zostanie przekazany dalej, ale prawdziwa tożsamość użytkownika nie jest ujawniana. Jak widać na liście produktów, produkt kosztował oryginalnie 70,00 zł i został przeceniony do 60,00 zł. Zastosowano kod rabatowy o wartości 10,00 zł, więc łączna kwota zamówienia wynosi 110,00 zł.

Dostawa elektroniczna

Jeśli użytkownik wybrał dostawę elektroniczną, wymaganą daną jest adres e-mail, na który zostanie dostarczone zamówienie cyfrowe:

{
"oaOrderId": "OA12345678901234",
"basket": {
"id": "xxx",
"price": {
"currency": "PLN",
"discounts": [],
"basketValue": 6000,
"deliveryCost": 100
},
"products": [
{
"ean": "12312",
"id": "id123",
"quantity": 1,
"unitPrice": 6000,
"linePrice": 6000
}
]
},
"deliveryDetails": {
"type": "ELECTRONIC",
"method": "ELECTRONIC",
"email": "userEmail@email.com"
},
"billingDetails": {
"companyName": "Nice Company",
"taxId": "111111111",
"country": "PL",
"city": "Warszawa",
"postalCode": "02-654",
"street": "Domaniewska",
"streetNo": "12A",
"notes": ""
},
"paymentDetails": {
"currency": "PLN",
"amount": 6000
},
"consents": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"version": 1
},
{
"id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"version": 2
}
]
}

Użytkownik zakupił 1 produkt za 60,00 zł. Ponieważ nie zastosowano kodu rabatowego, lista produktów zawiera tylko unitPrice i linePrice bez previousUnitPrice i previousLinePrice. Warto zauważyć, że użytkownik wyraził zgodę na marketing e-mailowy, ale nie na marketing SMS.

Odbiór osobisty w sklepie

Jeśli użytkownik wybrał odbiór osobisty, szczegóły dostawy zawierają zestaw danych adresowych wzbogacony o pointId punktu odbioru wybranego przez użytkownika w aplikacji:

{
"oaOrderId": "OA12345678901234",
"basket": {
"id": "basket-id",
"price": {
"currency": "PLN",
"discounts": [
{
"code": "discount-code-text",
"value": 1000
}
],
"basketValue": 11000,
"deliveryCost": 100
},
"products": [
{
"ean": "12312",
"id": "id123",
"quantity": 2,
"unitPrice": 6000,
"linePrice": 12000
}
],
"loggedUser": "user-id-from-webshop"
},
"deliveryDetails": {
"type": "PICKUP",
"method": "INPOST_APM",
"subType": "APM",
"id": "WAW22A",
"name": "WAW22A",
"street": "Domaniewska",
"streetNo": "12A",
"postalCode": "02-654",
"city": "Warszawa",
"country": "PL",
"email": "id@o-app.pl",
"phoneNumber": "+48123123123"
},
"paymentDetails": {
"currency": "PLN",
"amount": 11000
},
"consents": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"version": 1
},
{
"id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"version": 2
}
]
}

Dostawa kurierem

Jeśli użytkownik wybrał dostawę kurierem, szczegóły dostawy zawierają pełny zestaw danych adresowych:

{
"oaOrderId": "OA12345678901234",
"basket": {
"id": "basket-id",
"price": {
"currency": "PLN",
"discounts": [],
"basketValue": 12995,
"deliveryCost": 100
},
"products": [
{
"ean": "12312",
"id": "id123",
"quantity": 2,
"unitPrice": 6000,
"linePrice": 12000
}
],
"loggedUser": "user-id-from-webshop"
},
"deliveryDetails": {
"type": "COURIER",
"method": "INPOST_COURIER",
"firstName": "John",
"lastName": "Doe",
"country": "PL",
"city": "Warszawa",
"postalCode": "02-654",
"street": "Domaniewska",
"streetNo": "12",
"apartmentNo": "17",
"notes": "Please place the package on the porch behind the rose-bush if nobody opens the door.",
"phoneNumber": "+48123456789",
"email": "test@example.com",
"companyName": "Nice Company"
},
"billingDetails": {
"companyName": "Nice Company",
"taxId": "111111111",
"country": "PL",
"city": "Warszawa",
"postalCode": "02-654",
"street": "Domaniewska",
"streetNo": "12A",
"notes": ""
},
"paymentDetails": {
"currency": "PLN",
"amount": 12995
},
"consents": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"version": 1
},
{
"id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"version": 2
}
]
}

Ponieważ dostawa kurierem nie jest bezpłatna, do łącznej kwoty zamówienia doliczana jest dodatkowa opłata 9,95 zł.

Odpowiedź

W odpowiedzi sklep musi przesłać potwierdzenie złożenia zamówienia.

{
"oaOrderId": "0123456789abcdef0123456789abcdef",
"shopOrderId": "WS1213ASDZXC231A",
"returnPolicy": {
"maxReturnDays": 30
}
}

API merchanta powinno odpowiedzieć w czasie poniżej 8 sekund.