Buscar en la documentación
ctrl+4K
Módulos
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Soluciones

Visión general

El webhook envía un evento por solicitud HTTP POST con Content-Type: application/json con los siguientes parámetros:
  • Header: X-IFood-Signature utilizado para verificar si la request provino de iFood.
Consulta aquí cómo funciona la firma de una request del webhook y cómo utilizarla para validación.

Ejemplos

Ejemplo de curl asumiendo SECRET: "dummysecret":
curl --location 'http://localhost:8080/webhook' \
--header 'X-IFood-Signature: 6f9ed23a7b505a3b6907c5f6eb2ad1b056fbf35a643d365a9a072ed7aabca153' \
--header 'Content-Type: application/json' \
--data '{"code":"PLC","createdAt":"2023-02-20T18:19:03.20162269Z","fullCode":"PLACED","id":"a38ba215-f949-4b2c-982a-0582a9d0c10e","merchantId":"cad65e8f-6fc6-438a-b159-e64a902a6b9a","orderId":"2c97e104-35ed-4c18-85d7-854a40b6b9e3"}'
Valida la firma del payload tan pronto como lo recibas, antes de cualquier procesamiento o lectura de los datos. Haz la validación directamente en el byte array, sin hacer parse del contenido.Consulta el ejemplo de una request con payload equivalente al del primer ejemplo, solo con algunos espacios extras que afectan la firma, pero igualmente válida:
curl --location 'http://localhost:8080/webhook' \
--header 'X-IFood-Signature: cf7e092c9148a48f5ee5f12b947f46b331eac6bf0745e1e1d0f3df722e219df3' \
--header 'Content-Type: application/json' \
--data '{ "code":"PLC", "createdAt":"2023-02-20T18:19:03.20162269Z", "fullCode":"PLACED", "id":"a38ba215-f949-4b2c-982a-0582a9d0c10e", "merchantId":"cad65e8f-6fc6-438a-b159-e64a902a6b9a", "orderId":"2c97e104-35ed-4c18-85d7-854a40b6b9e3" }'
Consulta el ejemplo de otra request con payload equivalente, ahora formateada para facilitar la lectura, lo que también resulta en otra firma igualmente válida:
curl --location 'http://localhost:8080/webhook' \
--header 'X-IFood-Signature: adf5446334f754e73588f3ae10b308306307f0c797f7f678912d740c6deddf6a' \
--header 'Content-Type: application/json' \
--data '{
    "code":"PLC",
    "createdAt":"2023-02-20T18:19:03.20162269Z",
    "fullCode":"PLACED",
    "id":"a38ba215-f949-4b2c-982a-0582a9d0c10e",
    "merchantId":"cad65e8f-6fc6-438a-b159-e64a902a6b9a",
    "orderId":"2c97e104-35ed-4c18-85d7-854a40b6b9e3"
}'
Consulta el ejemplo de una request con payload equivalente, pero con el orden de las propiedades cambiadas, lo que también resulta en otra firma:
curl --location 'http://localhost:8080/webhook' \
--header 'X-IFood-Signature: e2d26f22f89932ff3d23a699031b22d6f30323501430dc08c3a971dd875e23b5' \
--header 'Content-Type: application/json' \
--data '{"merchantId":"cad65e8f-6fc6-438a-b159-e64a902a6b9a","orderId":"2c97e104-35ed-4c18-85d7-854a40b6b9e3","code":"PLC","createdAt":"2023-02-20T18:19:03.20162269Z","fullCode":"PLACED","id":"a38ba215-f949-4b2c-982a-0582a9d0c10e"}'

Qué responder al webhook

Envía una respuesta con el código 202 Accepted en hasta 5 segundos para confirmar la recepción del evento. El sistema considera esta respuesta como exitosa y no intentará reenviar el evento. Ignoramos el cuerpo de la respuesta, excepto en auditorías internas para fallos de entrega. En esos casos, envía la respuesta en el formato especificado.

Casos de error

El propósito de la request del webhook es integrar el evento con éxito. Usa respuestas de error solo para indicar falla en la integración, es decir, cuando el servidor no recibió o no procesó el evento correctamente.El webhook reconoce errores HTTP 5xx como fallos de recepción o procesamiento. El sistema solo hace reintentos para esta clase de errores.Las respuestas de error impactan el flujo de reintentos y deben usarse solo cuando sea necesario intentar la entrega nuevamente.Al retornar un error, envía el payload especificado abajo para detallar el motivo en la auditoría interna. Ignoramos cualquier otro formato o campo, como XML.
{
  "error": "error message"
}
Si todos los intentos de entrega fallan, el webhook descarta el evento. El sistema no hará nuevos intentos de entrega de ese evento.
iFood define el número máximo de intentos, el intervalo entre ellos y el tiempo de timeout. Informaremos cualquier actualización con anticipación. Consideramos timeout para requests con más de 5 segundos de respuesta e intentamos reenviar eventos por hasta 15 minutos. Si el endpoint responde con 202 después de 5 segundos, el sistema aún intentará reenviar el evento.

Ve también

¿Esta página fue útil?
Evalúa tu experiencia en el nuevo portal de desarrolladores: