API

Webhooki

Webhook — to żądanie HTTP, które FoodSoul wysyła na adres Twojego systemu, gdy w koncie wystąpi jakieś zdarzenie: nowe zamówienie, zmiana statusu, opinia i inne.

Subskrypcja z adresem i wydarzeniami tworzona jest za pomocą metody:

POST Utwórz subskrypcję webhooka

Adres — URL z subskrypcji, metoda — POST.

Format, podpis i powtórzenia

Treść żądania webhooka. Każde żądanie to POST z Content-Type: application/json na URL subskrypcji. URL musi zaczynać się od https. Nagłówki: X-Webhook-Event — kod zdarzenia, X-Webhook-ID — event_uuid, X-Webhook-Signature — sha256= oraz HMAC-SHA256 oryginalnego ciała żądania w hex z sekretem oddziału (webhooks_subscriptions.generate_secret). Weryfikuj podpis względem oryginalnego ciała przed przetwarzaniem JSON: hash_equals(hash_hmac('sha256', $body, $secret), substr($signature, 7)). Znacznik czasu nie jest zawarty w podpisie, kanał jest chroniony przez HTTPS. Dostawa jest uznana za przyjętą przy dowolnej odpowiedzi 2xx w ciągu 10 sekund. Przekierowania nie są wykonywane. W przeciwnym razie dostawa jest ponawiana: 7 prób, pierwsza natychmiast, następnie po 1, 5, 15, 60, 180 i 360 minutach. Wszystkie próby jednej dostawy zawierają ten sam X-Webhook-ID. Ponowna wysyłka z dziennika (webhooks_logs.resend) zawiera ten sam X-Webhook-ID — na jego podstawie pomijaj już obsłużone dostawy. 20 nieudanych dostaw z rzędu wyłącza subskrypcję (blocked), a właściciel i administrator systemowy konta otrzymują e-mail. webhooks_subscriptions.unblock ponownie włącza subskrypcję. Treść zawiera dane zdarzenia: klient, opinia i karta zamówienia są przekazywane w całości. Saldo bonusowe nie jest przekazywane: jest wspólne dla puli sieci, należy je pobrać przez API.

Nagłówki

X-Webhook-Eventstringwymagane

Przykład: order.created

X-Webhook-IDstringwymagane

Przykład: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

X-Webhook-Signaturestringwymagane

Przykład: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Zdarzenia

  • client.registered
  • client.updated
  • client.bonuses_changed
  • order.created
  • order.status_changed
  • order.payment_status_changed
  • feedback.created
  • courier.assigned
  • item.stop_list_changed
  • branch.work_status_changed

Treść żądania

object (WebhookPayload)
eventstringwymagane

Wartości:client.registeredclient.updatedclient.bonuses_changedorder.createdorder.status_changedorder.payment_status_changedfeedback.createdcourier.assigneditem.stop_list_changedbranch.work_status_changed

Przykład: order.status_changed

event_uuidstringwymagane

Przykład: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

date_creationstring (DataTimeFormatSQL) wymagane

Przykład: 2024-05-02 08:31:16

branch_idintegerwymagane

Przykład: 8412

dataoneOfwymagane
Jeden z wariantów
object (WebhookDataClientRegistered)

client.registered — nowy numer telefonu lub pierwsze logowanie konta w tym oddziale

client_branch_profile_idintegerwymagane

Przykład: 730112

namestringmoże być null

Przykład: John Doe

phonestringwymagane

Telefon w formacie międzynarodowym, bez formatowania

Przykład: +79114579423

genderstringmoże być null

Wartości:womanman

Przykład: man

date_of_birthstringmoże być null

Data urodzenia w formacie Y-m-d

Przykład: 1982-01-03

Przykład treści

{
  "event": "order.status_changed",
  "event_uuid": "5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41",
  "date_creation": "2024-05-02 08:31:16",
  "branch_id": 8412,
  "data": {
    "client_branch_profile_id": 730112,
    "name": "John Doe",
    "phone": "+79114579423",
    "gender": "man",
    "date_of_birth": "1982-01-03"
  }
}

Odpowiedź twojego systemu

2XX

Przyjęto

default

Не принято, доставка повторяется