API

Webhooks

Webhook — uma solicitação HTTP que o FoodSoul envia para o endereço do seu sistema quando ocorre um evento na conta: novo pedido, alteração de status, avaliação e outros.

A assinatura com endereço e eventos é criada pelo método:

POST Criar uma assinatura de webhook

O endereço é o URL da assinatura, o método é POST.

Formato, assinatura e repetições

Corpo da solicitação do webhook. Cada solicitação é um POST com Content-Type: application/json para a URL da assinatura. A URL deve começar com https. Cabeçalhos: X-Webhook-Event — código do evento, X-Webhook-ID — event_uuid, X-Webhook-Signature — sha256= e HMAC-SHA256 do corpo original da solicitação em hex com o segredo da filial (webhooks_subscriptions.generate_secret). Verifique a assinatura pelo corpo original antes de analisar o JSON: hash_equals(hash_hmac('sha256', $body, $secret), substr($signature, 7)). Não há timestamp na assinatura, o canal é protegido por HTTPS. A entrega é considerada aceita com qualquer resposta 2xx dentro de 10 segundos. Redirecionamentos não são seguidos. Caso contrário, a entrega é repetida: 7 tentativas, a primeira imediatamente, depois após 1, 5, 15, 60, 180 e 360 minutos. Todas as tentativas de uma entrega contêm o mesmo X-Webhook-ID. O reenvio a partir do log (webhooks_logs.resend) contém o mesmo X-Webhook-ID — use-o para ignorar entregas já processadas. 20 falhas consecutivas de entrega desativam a assinatura (blocked), e o proprietário e o administrador do sistema da conta recebem um e-mail. webhooks_subscriptions.unblock reativa a assinatura. O corpo contém os dados do evento: cliente, avaliação e cartão do pedido são transmitidos integralmente. O saldo de bônus não é transmitido: ele é comum para o pool de redes e deve ser obtido via API.

Cabeçalhos

X-Webhook-Eventstringobrigatório

Exemplo: order.created

X-Webhook-IDstringobrigatório

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

X-Webhook-Signaturestringobrigatório

Exemplo: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Eventos

  • 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 da solicitação

object (WebhookPayload)
eventstringobrigatório

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

Exemplo: order.status_changed

event_uuidstringobrigatório

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

date_creationstring (DataTimeFormatSQL) obrigatório

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

branch_idintegerobrigatório

Exemplo: 8412

dataoneOfobrigatório
Uma das opções
object (WebhookDataClientRegistered)

client.registered — novo telefone ou primeiro login da conta nesta filial

client_branch_profile_idintegerobrigatório

Exemplo: 730112

namestringpode ser nulo

Exemplo: John Doe

phonestringobrigatório

Telefone no formato internacional, sem formatação

Exemplo: +79114579423

genderstringpode ser nulo

Valores:womanman

Exemplo: man

date_of_birthstringpode ser nulo

Data de nascimento no formato Y-m-d

Exemplo: 1982-01-03

Exemplo de 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"
  }
}

Resposta do seu sistema

2XX

Aceito

default

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