Przejdź do treści

Callback status zamówienia

Callback status pozwala na aktualizację statusu zamówienia użytkownika w jego aplikacji. Poprawia to doświadczenie zakupowe klienta i zmniejsza prawdopodobieństwo jego kontaktu z biurem obsługi sklepu. Krok 12 na poniższym diagramie.

sequenceDiagram
  autonumber
  actor User
  participant OpenApp
  participant Merchant
  Merchant->>User: Wyświetlenie widgetu OA
  User->>+OpenApp: Pobranie koszyka
  OpenApp->>+Merchant: Pobranie koszyka i opcji dostawy
  Merchant->>-OpenApp: Zwrócenie koszyka i opcji dostawy
  OpenApp->>-User: Zwrócenie koszyka
  User->>User: Opcje checkoutu (dostawa itp)
  User->>+OpenApp: Płatność i złożenie zamówienia
  OpenApp->>OpenApp: Autoryzacja płatności
  OpenApp->>+Merchant: Potwierdzenie płatności i złożenie zamówienia
  Merchant->>-OpenApp: Potwierdzenie złożenia zamówienia
  OpenApp->>-User: Potwierdzenie zamówienia
  Merchant->>OpenApp: Callback fulfillmentowy
  OpenApp->>User: Wysłanie powiadomienia

Poniżej znajduje się lista statusów zamówień dostępnych dla sklepów. Zmiana statusu na inny odbywa się jedynie przez wysłanie nowego statusu zamówienia.

  • ORDERED oznacza status zamówienia skutecznie złożonego przez klienta i przyjętego przez backend sklepu,
  • FULFILLED oznacza status zamówienia przygotowanego do wysyłki,
  • SHIPPED oznacza status zamówienia wysłanego do klienta - odebranego przez kuriera lub wysłanego transportem własnym sklepu,
  • READY_FOR_PICKUP oznacza status zamówienia dostarczonego do punktu odbioru - Paczkomatu/Orlen Paczka lub własnego punktu odbioru sklepu,
  • DELIVERED oznacza status zamówienia odberanego przez klienta lub dostarczonego pod wskazany adres,
  • CANCELLED_MERCHANT oznacza status zamówienia, które zostało anulowane przez sklep (dowolny powód). Status ten jest możliwy do moment przejścia zamówienia w status DELIVERED (zmiana dokonana przez sklep lub OpenApp)

Logiczna sekwencja zmian statusów (każdy z kroków może być pominięty):

NEW -> ORDERED -> FULFILLED -> SHIPPED -> READY_FOR_PICKUP -> DELIVERED

NEW -> ORDERED -> FULFILLED -> SHIPPED -> IN_DELIVERY -> DELIVERED

stateDiagram-v2
  state if_state2 <<choice>>
  [*] --> ORDERED
  ORDERED --> FULFILLED
  FULFILLED --> SHIPPED
  SHIPPED --> if_state2
  if_state2 --> READY_FOR_PICKUP: APM lub odbiór w sklepie
  if_state2 --> IN_DELIVERY: dostawa kurierem
  READY_FOR_PICKUP --> DELIVERED
  IN_DELIVERY --> DELIVERED
  DELIVERED --> [*]

Zamówienie wysyłane w jednej wysyłce

Request

Aktualizacja statusu zamówienia dokonuje się wysyłając dane metodą POST na następujący endpoint:

POST {{OpenAppUrl}}/merchant/v1/orders/fulfillment

Żądanie z danymi o aktualizacji fulfillmentu:

Fulfillment update request
{
  "oaOrderId": "OA12345678901234",
  "shopOrderId": "WS1213ASDZXC231A",
  "status": "READY_FOR_PICKUP",
  "notes": "free text description",
  "shipping": {
    "operator": "INPOST_APM",
    "trackingCode": "z123",
    "trackingUrl": "https://example.invalid/tracking?c=z123"
  }
}
Fulfillment update request
{
    "additionalProperties": false,
    "type": "object",
    "properties": {
        "oaOrderId": {
            "type": "string",
            "title": "oaOrderId"
        },
        "shopOrderId": {
            "type": "string",
            "title": "shopOrderId"
        },
        "status": {
            "$ref": "#/definitions/StoreDeliveryStatus",
            "title": "status"
        },
        "notes": {
            "type": "string",
            "title": "notes"
        },
        "shipping": {
            "additionalProperties": false,
            "$ref": "#/definitions/OrderShipment",
            "title": "shipping"
        }
    },
    "required": [
        "notes",
        "oaOrderId",
        "shopOrderId",
        "status"
    ],
    "definitions": {
        "StoreDeliveryStatus": {
            "title": "StoreDeliveryStatus",
            "enum": [
                "CANCELLED_MERCHANT",
                "DELIVERED",
                "FULFILLED",
                "IN_DELIVERY",
                "ORDERED",
                "READY_FOR_PICKUP",
                "SHIPPED"
            ],
            "type": "string"
        },
        "OrderShipment": {
            "additionalProperties": false,
            "title": "OrderShipment",
            "type": "object",
            "properties": {
                "operator": {
                    "description": "The operator of the shipment",
                    "maxLength": 64,
                    "type": "string",
                    "title": "operator"
                },
                "trackingCode": {
                    "description": "The tracking code.",
                    "maxLength": 64,
                    "type": "string",
                    "title": "trackingCode"
                },
                "trackingUrl": {
                    "description": "The tracking URL.",
                    "maxLength": 255,
                    "type": "string",
                    "title": "trackingUrl"
                }
            }
        }
    },
    "$schema": "http://json-schema.org/draft-07/schema#"
}

Response

W odpowiedzi OpenApp potwierdzi przyjęcie zlecenia zmiany statusu.

Errors

Error name Code
IncorrectDeliveryStatusException 400
OrderNotFoundException 404
MerchantOrderOwnershipException 404

Zamówienie rozdzielane na kilka wysyłek (paczek)

Możliwe jest, że zamówienie klienta zostanie wysłane nie w jednej, ale w kilku wysyłkach (paczkach). Aby poinformować o tym OpenApp i klienta, należy użyć endpointu multi-fulfillment opisanego poniżej.

Warning

Po rozdzieleniu zamówienia na wiele wysyłek, nie można już korzystać z endpointu dla pojedyńczej wysyłki. Dodatkowo, każda stworzona wysyłka musi być obecna w kazdym zapytaniu do endpointu multi-fulfillment. Tak więc, jeśli zamówienie zostanie podzielone na 3 wysyłki, należy aktualizować statusy z 3 wysyłkami na liście. Jeśli zamówienie zostanie następnie podzielone na 2 wysyłki, konieczne jest wysyłanie do OpenApp 3 wysyłek (trzecia wysyłka może mieć oczywiście status cancelled).

Request

Request aktualizujący status jest wykonywany przez POST na następujęcy endpoint:

POST {{OpenAppUrl}}/merchant/v1/orders/multiFulfillment

Treść requestu zawiera informacje o statusie fulfillmentu (realizacji)The:

Fulfillment update request
{
  "oaOrderId": "OA12345678901234",
  "shopOrderId": "WS1213ASDZXC231A",
  "shipments": [
    {
      "shipmentId": "hkkdf378723_1",
      "status": "READY_FOR_PICKUP",
      "notes": "free text description",
      "operator": "INPOST_APM",
      "trackingCode": "z123",
      "trackingUrl": "https://example.invalid/tracking?c=z123",
      "products": [
        {
          "id": "productxyz",
          "quantity": 5
        }
      ],
      "timing": "dec 1 - dec 2"
    },
    {
      "shipmentId": "hkkdf378723_2",
      "status": "FULFILLED"
    }
  ]
}
Fulfillment update request
{
    "additionalProperties": false,
    "type": "object",
    "properties": {
        "oaOrderId": {
            "type": "string",
            "title": "oaOrderId"
        },
        "shopOrderId": {
            "type": "string",
            "title": "shopOrderId"
        },
        "shipments": {
            "description": "The shipments for the order",
            "type": "array",
            "items": {
                "$ref": "#/definitions/OrderShipmentMulti"
            },
            "title": "shipments"
        }
    },
    "required": [
        "oaOrderId",
        "shipments",
        "shopOrderId"
    ],
    "definitions": {
        "OrderShipmentMulti": {
            "additionalProperties": false,
            "title": "OrderShipmentMulti",
            "type": "object",
            "properties": {
                "shipmentId": {
                    "description": "The id of the shipment",
                    "maxLength": 64,
                    "type": "string",
                    "title": "shipmentId"
                },
                "status": {
                    "$ref": "#/definitions/StoreDeliveryStatus",
                    "description": "The status of the shipment",
                    "title": "status"
                },
                "notes": {
                    "description": "Optional merchant notes on the shipment",
                    "maxLength": 64,
                    "type": "string",
                    "title": "notes"
                },
                "products": {
                    "description": "The products which will be in this shipment",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/OrderShipmentProduct"
                    },
                    "title": "products"
                },
                "timing": {
                    "description": "The estimation of the delivery time, i.e. 'next business day' or 'July 18th'.",
                    "maxLength": 40,
                    "type": "string",
                    "title": "timing"
                },
                "operator": {
                    "description": "The operator of the shipment",
                    "maxLength": 64,
                    "type": "string",
                    "title": "operator"
                },
                "trackingCode": {
                    "description": "The tracking code.",
                    "maxLength": 64,
                    "type": "string",
                    "title": "trackingCode"
                },
                "trackingUrl": {
                    "description": "The tracking URL.",
                    "maxLength": 255,
                    "type": "string",
                    "title": "trackingUrl"
                }
            },
            "required": [
                "shipmentId",
                "status"
            ]
        },
        "StoreDeliveryStatus": {
            "title": "StoreDeliveryStatus",
            "enum": [
                "CANCELLED_MERCHANT",
                "DELIVERED",
                "FULFILLED",
                "IN_DELIVERY",
                "ORDERED",
                "READY_FOR_PICKUP",
                "SHIPPED"
            ],
            "type": "string"
        },
        "OrderShipmentProduct": {
            "additionalProperties": false,
            "title": "OrderShipmentProduct",
            "type": "object",
            "properties": {
                "id": {
                    "description": "The unique ID of the product.",
                    "maxLength": 36,
                    "type": "string",
                    "title": "id"
                },
                "quantity": {
                    "description": "The number of items in the purchase.",
                    "minimum": 0,
                    "type": "integer",
                    "title": "quantity"
                }
            },
            "required": [
                "id",
                "quantity"
            ]
        }
    },
    "$schema": "http://json-schema.org/draft-07/schema#"
}

Odpowiedź

W odpowiedzi, OpenApp potwierdzi status.

Errors

Error name Code
OrderNotFoundException 404
MerchantOrderOwnershipException 404