API

Webhook-uri

Webhook-ul este o solicitare HTTP pe care FoodSoul o trimite către adresa sistemului dumneavoastră atunci când are loc un eveniment în cont: o comandă nouă, schimbarea statusului, o recenzie și altele.

Abonamentul cu adresă și evenimente este creat prin metoda:

POST Creează o subscriere la webhook

Adresa — URL din abonament, metoda — POST.

Format, semnătură și repetiții

Corpul cererii webhook-ului. Fiecare cerere este un POST cu Content-Type: application/json către URL-ul abonamentului. URL-ul trebuie să înceapă cu https. Header-e: X-Webhook-Event — codul evenimentului, X-Webhook-ID — event_uuid, X-Webhook-Signature — sha256= și HMAC-SHA256 al corpului original al cererii în hex, cu secretul filialei (webhooks_subscriptions.generate_secret). Verificați semnătura pe corpul original înainte de parsarea JSON: hash_equals(hash_hmac('sha256', $body, $secret), substr($signature, 7)). Timpul nu este inclus în semnătură, canalul este securizat prin HTTPS. Livrarea este considerată acceptată la orice răspuns 2xx în decurs de 10 secunde. Redirect-urile nu sunt urmate. În caz contrar, livrarea este reluată: 7 încercări, prima imediat, apoi după 1, 5, 15, 60, 180 și 360 de minute. Toate încercările unei livrări conțin același X-Webhook-ID. Retrimiterea din jurnal (webhooks_logs.resend) conține același X-Webhook-ID — folosiți-l pentru a ignora livrările deja procesate. 20 de livrări eșuate consecutiv dezactivează abonamentul (blocked), iar proprietarul și administratorul de sistem al contului primesc un e-mail. webhooks_subscriptions.unblock reactivează abonamentul. Corpul conține datele evenimentului: clientul, recenzia și fișa comenzii sunt transmise complet. Soldul de bonus nu este transmis: acesta este comun pentru un grup de rețele și trebuie obținut prin API.

Anteturi

X-Webhook-Eventstringobligatoriu

Exemplu: order.created

X-Webhook-IDstringobligatoriu

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

X-Webhook-Signaturestringobligatoriu

Exemplu: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Evenimente

  • 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

Corpul cererii

object (WebhookPayload)
eventstringobligatoriu

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

Exemplu: order.status_changed

event_uuidstringobligatoriu

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

date_creationstring (DataTimeFormatSQL) obligatoriu

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

branch_idintegerobligatoriu

Exemplu: 8412

dataoneOfobligatoriu
Una dintre opțiuni
object (WebhookDataClientRegistered)

client.registered — număr de telefon nou sau prima autentificare a contului în această filială

client_branch_profile_idintegerobligatoriu

Exemplu: 730112

namestringpoate fi null

Exemplu: John Doe

phonestringobligatoriu

Telefon în format internațional, fără formatare

Exemplu: +79114579423

genderstringpoate fi null

Valori:womanman

Exemplu: man

date_of_birthstringpoate fi null

Data nașterii în formatul Y-m-d

Exemplu: 1982-01-03

Exemplu de corp

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

Răspunsul sistemului dumneavoastră

2XX

Acceptat

default

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