在Laravel中实现Gocardless webhook

时间:2017-12-08 11:14:32

标签: php laravel webhooks gocardless

我试图在laravel中实现webhook。

我已经创建了访问令牌并创建了webhook端点。

我的webhook终点就像https://www.example.com/gocardless.php

我的路线就像,

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);
   }
   }
   } 

控制器代码,如

{{1}}

但是当我在gaxless帐户中发送测试webhook时,他们被给予" 405没有找到方法"作为回应。

我如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您看到的HTTP 405 error表示您的Laravel应用程序不知道如何处理传入请求的method

GoCardless webhooks use the POST method向您发送带有JSON正文的请求,但您编写的路由是用于处理GET请求(Route::get)。要解决此问题,您应该define a route发送对将接收webhooks的端点的POST请求。

答案 1 :(得分:1)

一些评论和修正

备注

为什么要包括"丑陋"在你的路线中.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的形式返回数据,例如