php Laravel Webhook不能像Mollie API那样工作

q1qsirdb  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(160)

什么是最好的方法,你怎么能做到这一点?
我目前有一个用laravel(livewire)渲染视图的livewire组件。现在的问题是,我有一个订单函数,它给mollie数据,并返回一个重定向到相应的mollie路线支付。在这里,我已经为莫莉设置了webhook。

public function order() {
        $user = Auth::user();
        $payment = Mollie::api()->payments()->create([
            'amount' => [
                'currency' => 'EUR',
                'value' => number_format($this->service->price, 2, '.', '')
            ],
            'description' => 'Order #' . Str::random(6),
            'redirectUrl' => route('service.order.callback'),
            'webhookUrl' => route('service.order.webhook'),
            'metadata' => [
                'user' => [
                    'id' => $user->id,
                    'name' => $user->name,
                ],
                'invoice' => [
                    'id' => 0
                ]
            ]
        ]);

        return $this->redirect($payment->getCheckoutUrl(), 303);
    }

我已经调整了路线。在我的web.php webhook看到这里.

Route::post('/service/order/webhook', [\App\Http\Controllers\Payment\Invoice::class, 'webhook'])->name('service.order.webhook');

现在它知道在一个正常的Laravel(php)控制器进一步,因为我可以在livewire没有功能,只是这样。
但是webhook函数根本没有被调用,也没有错误被抛出。webhook函数有一个发票数据库迁移,然后实际上把一些东西放入数据库。请参阅此处:

public function webhook() {
        $invoiceUser = \App\Models\Payment\Invoice::create([
            'status' => 'paid',
            'number' => '1',
            'date' => Carbon::now(),
            'billing_detail_id' => 1,
            'payment_id' => 1
        ]);
    }

我只是在测试路线上测试了整个事情,创建发票工作。

w8ntj3qf

w8ntj3qf1#

请记住:Laravel POST路由默认情况下由VerifyCsrfToken中间件(app/Http/Middleware/VerifyCsrfToken.php)保护。webhook调用是POST请求。但不是从一个形式。因此,必须定义一个例外。打开app/Http/Middleware/VerifyCsrfToken.php.将你的webhook url添加到受保护的$except数组中。

相关问题