Facebook отправляет данные webhook как Content-Type: application/json
, а не как …: application/x-www-form-urlencoded
(как обычная форма с методом = post.)
Поэтому PHP не заполняет $ _POST - вам нужно прочитать вместо исходного потока. Это можно сделать с помощью file_get_contents('php://input')
, а затем просто применить json_decode
к этим данным, и у вас будет правильная структура данных для работы.
Если вы работаете как CGI, вы не можете читать HTTP-заголовок напрямую, но веб-сервер помещает большую часть этой информации в переменные среды за вас. Вы можете просто выбрать его из os.environ []
Список переменных среды, которые могут там присутствовать, довольно длинный. Вы можете найти его, выполнив поиск в Интернете по запросу «общий интерфейс шлюза». Например, в http://www.ietf.org/rfc/rfc3875.txt они называются «метапеременными».
Как объясняет на этой странице , большинство заголовков HTTP-запросов становятся доступными для вашего CGI-скрипта через переменные среды. Запустите cgi.test () вместо вашего скрипта, чтобы увидеть среду (включая заголовки HTTP-запроса), отображаемую в вашем браузере.
Они передаются сценарию CGI через среду:
import os
user_agent = os.environ["HTTP_USER_AGENT"]
ip = os.environ["REMOTE_ADDR"]