API

Webhook

Un webhook è una richiesta HTTP che FoodSoul invia all'indirizzo del vostro sistema quando si verifica un evento nell'account: un nuovo ordine, un cambio di stato, una recensione e altri.

L'abbonamento con indirizzo ed eventi viene creato tramite il metodo:

POST Creare una sottoscrizione al webhook

L'indirizzo è l'URL dall'abbonamento, il metodo è POST.

Formato, firma e ripetizioni

Corpo della richiesta webhook. Ogni richiesta è un POST con Content-Type: application/json all'URL della sottoscrizione. L'URL deve iniziare con https.
Header: X-Webhook-Event — codice dell'evento, X-Webhook-ID — event_uuid, X-Webhook-Signature — sha256= e HMAC-SHA256 del corpo originale della richiesta in hex con il segreto della filiale (webhooks_subscriptions.generate_secret).
Verificare la firma sul corpo originale prima di analizzare il JSON: hash_equals(hash_hmac('sha256', $body, $secret), substr($signature, 7)). Il timestamp non è incluso nella firma, il canale è protetto da HTTPS.
La consegna è considerata accettata con qualsiasi risposta 2xx entro 10 secondi. I redirect non vengono seguiti. Altrimenti, la consegna viene ripetuta: 7 tentativi, il primo immediato, poi dopo 1, 5, 15, 60, 180 e 360 minuti. Tutti i tentativi della stessa consegna contengono lo stesso X-Webhook-ID. Il reinvio dal registro (webhooks_logs.resend) contiene lo stesso X-Webhook-ID — utilizzarlo per ignorare le consegne già elaborate.
20 consegne fallite consecutive disattivano la sottoscrizione (blocked), e il proprietario e l'amministratore di sistema dell'account ricevono una email. webhooks_subscriptions.unblock riattiva la sottoscrizione.
Il corpo contiene i dati dell'evento: cliente, recensione e scheda ordine sono trasmessi completamente. Il saldo bonus non viene trasmesso: è condiviso per il pool di reti, deve essere ottenuto tramite API.

Intestazioni

X-Webhook-Eventstringobbligatorio

Esempio: order.created

X-Webhook-IDstringobbligatorio

Esempio: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

X-Webhook-Signaturestringobbligatorio

Esempio: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Eventi

  • 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

Corpo della richiesta

object (WebhookPayload)
eventstringobbligatorio

Valori:client.registeredclient.updatedclient.bonuses_changedorder.createdorder.status_changedorder.payment_status_changedfeedback.createdcourier.assigneditem.stop_list_changedbranch.work_status_changed

Esempio: order.status_changed

event_uuidstringobbligatorio

Esempio: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

date_creationstring (DataTimeFormatSQL) obbligatorio

Esempio: 2024-05-02 08:31:16

branch_idintegerobbligatorio

Esempio: 8412

dataoneOfobbligatorio
Una delle opzioni
object (WebhookDataClientRegistered)

client.registered — nuovo numero di telefono o primo accesso dell'account in questa filiale

client_branch_profile_idintegerobbligatorio

Esempio: 730112

namestringpuò essere nullo

Esempio: John Doe

phonestringobbligatorio

Telefono in formato internazionale, senza formattazione

Esempio: +79114579423

genderstringpuò essere nullo

Valori:womanman

Esempio: man

date_of_birthstringpuò essere nullo

Data di nascita nel formato Y-m-d

Esempio: 1982-01-03

Esempio di corpo

{
  "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"
  }
}

Risposta del vostro sistema

2XX

Accettato

default

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