A separate gateway service instead of a Laravel webhook controller
A Laravel route would have been less infrastructure and fewer moving parts, and for a single-tenant store it might have been right.
Three things pushed the other way. Meta requires raw-body signature verification, which fights framework middleware that has already parsed the request. WhatsApp Flow needs RSA and AES key handling that has no business sitting next to invoice logic. And webhook delivery must be acknowledged fast — a thin service that verifies, decrypts and forwards can return immediately regardless of how slow downstream work is.
The gateway ended up at 14 files with its own crypto tests. That is the entire cost of never having to touch business code when Meta changes something.
