Веб-крючок недействителен после в Twilio

#twilio #twilio-api #twilio-php #twilio-twiml

Вопрос:

Я пытаюсь протестировать рабочий процесс в twilio, рабочий процесс выглядит следующим образом:

  • Поступает вызов, и мой сервер попадает под действие twilio, запрос действителен в соответствии с документами
  • Webhook возвращает Twiml с перенаправлением на другую конечную точку, чтобы поставить вызов в очередь.
  • На этой конечной точке веб-крючок недействителен.

Все конечные точки, за исключением этой второй конечной точки, проверяются правильно. Есть ли какой-либо особый случай, который мне нужно учитывать при проверке перенаправлений, подобных этому?

Я использую laravel, если это имеет значение.

[Правка1]

Твимл выглядит так

 <?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say></Say>
    <Redirect>https://example.com/webhook/call/handle-incoming-call?Enqueue=1</Redirect>
</Response>
 

После перенаправления на этот URL-адрес запрос возвращает ошибку 403.

Для проверки я использую следующий код в промежуточном программном обеспечении для маршрутов в laravel.

 <?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateHttpResponse;
use TwilioSecurityRequestValidator;

class TwilioRequestValidator
{
    /**
     * Handle an incoming request.
     *
     * @param IlluminateHttpRequest $request
     * @param Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Be sure TWILIO_TOKEN is set in your .env file.
        // You can get your authentication token in your twilio console https://www.twilio.com/console
        $requestValidator = new RequestValidator(env('TWILIO_TOKEN'));

        $requestData = $request->toArray();

        // Switch to the body content if this is a JSON request.
        if (array_key_exists('bodySHA256', $requestData)) {
            $requestData = $request->getContent();
        }
        $isValid = false;

        if ($request->hasHeader('X-Twilio-Signature')) {
            $isValid = $requestValidator->validate(
                $request->header('X-Twilio-Signature'),
                $request->fullUrl(),
                $requestData
            );
        }


        if ($isValid) {
            return $next($request);
        } else {
            return new Response('Invalid Request', 403);
        }
    }
}
 

Спасибо.

Комментарии:

1. Не могли бы вы рассказать подробнее? Как выглядит код, возвращающий перенаправление? Как вы проверяете веб-крючки на этих двух конечных точках?

2. Я обновил вопрос дополнительной информацией

3. При вызове $request->toArray() это просто возвращает параметры в теле запроса или также включает параметры строки запроса? (Извините, я не разработчик Laravel.) Если он содержит параметры строки запроса, то именно поэтому это неправильно, и вы должны попытаться получить только параметры тела запроса после отправки (возможно request->request->all() ?).

4. Да, в этом и была проблема, мне пришлось использовать $request->post() вместо метода toArrray. Спасибо за указатель

Ответ №1:

Евангелист-разработчик Twilio здесь.

Вместо того, чтобы использовать request->toArray() which возвращает все параметры, вам просто нужны параметры тела. Параметры строки запроса уже рассмотрены в разделе request->fullUrl() .

Вместо этого попробуйте request->post() получить данные POST.