Postgrid Webhook не называется laravel

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

Можете ли вы помочь мне решить эту проблему?

Вы ввели неправильный URL-адрес в Postgrid? Просто предполагаю. В вашем вопросе мало информации для устранения неполадок. Работает ли вебхук, когда вы его тестируете?

KIKO Software 05.04.2024 08:39

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

Ankur Thakrar 05.04.2024 08:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка 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, я могу получить фактические данные, почему это так случилось, можешь объяснить?

Ankur Thakrar 05.04.2024 09:11

Пожалуйста! Что касается вашего другого вопроса, я раньше не использовал postgrid и не знаком с тем, как они отправляют свои данные, но я предполагаю, что когда вы выбираете JWT, полезная нагрузка веб-перехватчика отправляется внутри самого токена JWT, и вам нужно декодирует токен и извлекает данные, в то время как полезная нагрузка JSON приведет к отправке полезной нагрузки веб-перехватчика в виде строки JSON внутри тела ответа. Вам также может потребоваться добавить секретный ключ, чтобы защитить вебхук от несанкционированного доступа.

Eyad Bereh 05.04.2024 09:21

Хорошо, я понял, спасибо за помощь. Можете ли вы подсказать мне, какой язык мне сейчас выучить: Node или Python?

Ankur Thakrar 05.04.2024 09:22

Другие вопросы по теме