Я хотел бы настроить вебхук для своего приложения Laravel. Я создал веб-перехватчик, который срабатывает при создании и обновлении открытки, но постоянно получаю коды ошибок 419 или 405. Кроме того, в моих журналах Laravel не отображаются никакие входящие запросы веб-перехватчика, что позволяет предположить, что мой URL-адрес никогда не вызывается. Это означает, что моя система не захватывает полезную нагрузку и не обрабатывает событие веб-перехватчика.
Можете ли вы помочь мне решить эту проблему?
@KIKOSoftware да, я проверил, URL-адрес правильный. Когда я нажимаю URL-адрес в браузере, он работает, но из веб-перехватчика он не вызывается, также мой тип маршрута «любой», поэтому нет проблем с изменением типа маршрута.






Ошибка 405 - Method Not Allowed означает, что вы пытаетесь выполнить запрос к ресурсу, используя неподдерживаемый HTTP-команд.
Например: postgrid может пытаться создать POST-запрос к вашей конечной точке веб-перехватчика, но ваша конечная точка веб-перехватчика поддерживает только метод GET, поэтому вам необходимо проверить документацию postgrid и найти правильный глагол HTTP для использования с конечной точкой веб-перехватчика.
Что касается ошибки 419 - Page Expired, эта ошибка обычно возникает в Laravel из-за отсутствия токена CSRF, который не отправляется вместе с запросом, поэтому здесь вам нужно исключить конечную точку веб-перехватчика из проверки CSRF.
Способ сделать это зависит от вашей версии Laravel:
Laravel 11.x: откройте файл bootstrap/app.php и вызовите метод validateCsrfTokens() в обратном вызове метода withMiddleware(). Этот метод принимает массив строк, где каждая строка представляет маршрут. Эти маршруты будут исключены из проверки CSRF. Как это сделать:
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
channels: __DIR__.'/../routes/channels.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'you-webhook-endpoint/action-name'
]);
})->create();
Laravel 10.x (и старше): в каталоге VerifyCsrfToken есть промежуточное ПО app/Http/Middleware. У этого промежуточного программного обеспечения есть свойство $except, которое вы можете использовать для указания конечных точек, которые будут исключены из проверки CSRF:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array<int, string>
*/
protected $except = [
'you-webhook-endpoint/action-name'
];
}
Обновление: на самом деле есть более простое решение: если вы определите маршрут конечной точки веб-перехватчика внутри вашего файла routes/api.php, вам не придется вручную настраивать что-либо, связанное с CSRF, поскольку маршруты API не имеют проверок такого типа.
ты прав, моя проблема решена, спасибо, брат.. еще один вопрос, когда я выбираю формат полезной нагрузки JWT из веб-перехватчика postgrid, затем в $request->all() я ничего не могу получить, но когда выбираю json, я могу получить фактические данные, почему это так случилось, можешь объяснить?
Пожалуйста! Что касается вашего другого вопроса, я раньше не использовал postgrid и не знаком с тем, как они отправляют свои данные, но я предполагаю, что когда вы выбираете JWT, полезная нагрузка веб-перехватчика отправляется внутри самого токена JWT, и вам нужно декодирует токен и извлекает данные, в то время как полезная нагрузка JSON приведет к отправке полезной нагрузки веб-перехватчика в виде строки JSON внутри тела ответа. Вам также может потребоваться добавить секретный ключ, чтобы защитить вебхук от несанкционированного доступа.
Хорошо, я понял, спасибо за помощь. Можете ли вы подсказать мне, какой язык мне сейчас выучить: Node или Python?
Вы ввели неправильный URL-адрес в Postgrid? Просто предполагаю. В вашем вопросе мало информации для устранения неполадок. Работает ли вебхук, когда вы его тестируете?