Я пытался реализовать 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 метод не найден» в качестве ответа.
Как я могу решить это?
Ошибка HTTP 405 вы видите, указывает, что ваше приложение Laravel не знает, как обрабатывать метод входящего запроса.
WebChocks GoCardless используют метод POST чтобы отправить вам запрос с телом JSON, но вы написали маршрут для обработки запроса GET (Route::get
). Чтобы решить эту проблему, вы должны определить маршрут для запросов POST к конечной точке, которая будет получать веб-хуки.
Несколько замечаний и исправлений
Почему вы включаете в свой маршрут «некрасивое» расширение .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