Внедрить Gocardless webhook в Laravel
Я пытался реализовать webhook в laravel.
Я создал токен доступа и также создал конечную точку webhook.
моя конечная точка 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 к конечной точке, которая будет получать веб-хуки.
Несколько замечаний и исправлений
замечание
Почему вы включаете в свой маршрут "некрасивое" расширение.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