Postgrid Webhook 不叫 laravel

问题描述 投票:0回答:1

我想为我的 Laravel 应用程序设置一个 Webhook。我创建了一个在明信片创建和更新事件上触发的 Webhook,但我始终收到错误代码 419 或 405。此外,我的 Laravel 日志不显示任何传入的 Webhook 请求,这表明我的 URL 从未被调用。这意味着我的系统没有捕获有效负载或处理 webhook 事件。

你能帮我解决这个问题吗?

php laravel api webhooks
1个回答
0
投票

错误

405 - Method Not Allowed
表示您正在尝试使用不受支持的 HTTP 动词向资源发出请求。

例如:postgrid 可能会尝试向您的 webhook 端点创建 POST 请求,但您的 webhook 端点仅支持 GET 方法,因此您需要检查 postgrid 的文档并查看与您的 webhook 端点一起使用的正确 HTTP 动词。

关于错误

419 - Page Expired
,此错误通常在 Laravel 中发生,因为缺少 CSRF 令牌而未与请求一起发送,因此您需要在此处执行的操作是将 webhook 端点从 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'
    ];
}
© www.soinside.com 2019 - 2024. All rights reserved.