2

我试图在 laravel 中实现一个 webhook。

我还创建了访问令牌并创建了 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);
   }
   }
   } 

但是当我在 gocardless 帐户中单击发送测试 webhook 时,他们会得到“405 no method found”作为响应。

我怎么能解决这个问题?

4

2 回答 2

3

您看到的HTTP 405 错误表明您的 Laravel 应用程序不知道如何处理传入请求的方法

GoCardless webhook 使用 POST 方法向您发送带有 JSON 正文的请求,但您编写的路由是用于处理 GET 请求 ( Route::get)。要解决此问题,您应该为 POST 请求定义到将接收 webhook 的端点的路由。

于 2017-12-08T13:25:53.503 回答
2

一些评论和修复

评论

为什么要在路由中包含“丑陋”的 .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 返回

于 2017-12-08T11:30:21.287 回答