Так что я действительно не знаю, в чем здесь проблема, я пробовал много вещей, но я не могу заставить хэши запросов Twilio совпадать. Позволь мне объяснить.
Я решил реализовать экземпляр RequestValidator Twilio, чтобы убедиться, что запросы исходят от Twilio. Но после выполнения руководства здесь: https://www.twilio.com/docs/usage/security?code-sample=code-validate-signature-of-request-1&code-language=PHP&code-sdk-version=5.x
Валидатор возвращает только ложь. Вот код, который я использовал:
$url = 'https://example.com/api/endpoint/to/endpoint/';
$request_params = $_REQUEST;
$twilio_validator = new RequestValidator('myauthtoken');
if (!$twilio_validator->validate($_SERVER['HTTP_X_TWILIO_SIGNATURE'], $url, $request_params)) {
throw new CallException('Not from Twilio');
}
Несмотря на то, что URL-адрес является примером, именно так я отформатировал фактический URL-адрес... без порта, базовой аутентификации или фрагмента. Только протокол, домен и путь с завершающим «/». Кроме того, URL-адрес — это точный URL-адрес VoiceURL, который я установил при настройке этого приложения Twilio (это вызов VoiceURL для одного из моих приложений Twilio).
Мой токен авторизации — это токен авторизации для всей моей учетной записи.
Параметры запроса - это то место, где я уверен, что что-то напутал. Twilio отправляет GET-запрос к этой конечной точке, и я также пытался использовать суперглобальный $_GET
, но безрезультатно. Я использую здесь $_REQUEST
из-за этой проблемы: https://github.com/twilio/twilio-php/issues/510 и потому что я подумал, что это будет лучший выбор. Я также пытался использовать file_get_contents('php://input')
для решения той же проблемы (в конечном счете, хэши не совпадают).
Я даже разветвил и открыл PR в PHP SDK, чтобы немного обновить класс, просто чтобы посмотреть, смогу ли я узнать больше... так что я довольно хорошо знаю класс и его методы... я просто не вижу моя проблема.
Что я делаю неправильно, чтобы RequestValidator не проверял, что запросы от Twilio исходят от Twilio?