Внедрить 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

Другие вопросы по тегам