Внедрить Gocardless webhook в Laravel

Я пытался реализовать webhook в laravel.

Я создал токен доступа и также создал конечную точку webhook.

моя конечная точка — какhttps://www.example.com/gocardless.php

и мой маршрут как,

Route::get('/gocardless.php',
'\App\Http\Controllers\gocardlessController@remote')->name('remote');

Код контроллера, как,

class gocardlessController extends Controller
{public function remote(Request $request)
{

$token ="token";

$raw_payload = file_get_contents('php://input');

$headers = getallheaders();$provided_signature = $headers["Webhook-Signature"];
$calculated_signature = hash_hmac("sha256",$raw_payload,$token);
if ($provided_signature == $calculated_signature) {

$payload = json_decode($raw_payload, true);
}
}
}

Но когда я нажимаю на отправку тестового webhook в gocardless аккаунте, им дают «405 метод не найден» в качестве ответа.

Как я могу решить это?

2

Решение

Ошибка HTTP 405 вы видите, указывает, что ваше приложение Laravel не знает, как обрабатывать метод входящего запроса.

WebChocks GoCardless используют метод POST чтобы отправить вам запрос с телом JSON, но вы написали маршрут для обработки запроса GET (Route::get). Чтобы решить эту проблему, вы должны определить маршрут для запросов POST к конечной точке, которая будет получать веб-хуки.

3

Другие решения

Несколько замечаний и исправлений

Почему вы включаете в свой маршрут «некрасивое» расширение .php, в этом нет необходимости

Измените свой маршрут (в web.php) на

Route::get('gocardless', 'gocardlessController@remote');

Я также вижу, что вы начинаете имя вашего контроллера со строчной буквы, это не обычная практика

Не забудьте добавить эти строки в свой контроллер вверху

namespace App\Http\Controllers; // declare right namespace

use Illuminate\Http\Request; // Hint which Request class to use below

Для тела: что вы действительно должны написать сами и вернуть данные, например, как json

1

По вопросам рекламы [email protected]