【问题标题】:Implement Gocardless webhook in Laravel在 Laravel 中实现 Gocardless webhook
【发布时间】:2018-05-22 15:12:27
【问题描述】:

我试图在 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”作为响应。

我该如何解决这个问题?

【问题讨论】:

  • 你的路由必须在routes/web.php中,不需要在路由中写\App\Http\Controllers。
  • @Reshma 在你的 laravel 项目中是否完成了 gocardless 的实现?
  • @AlauddinAhmed 是的。
  • @Reshma 你能帮帮我吗?我在测试环境中的 webhook 中有错误。给我 419 身份验证超时错误。我正在使用 laravel 5.5
  • @AlauddinAhmed 当然。你能显示你的代码并告诉我确切的问题出在哪里

标签: php laravel webhooks gocardless


【解决方案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 格式返回数据

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我已将其更改为 (Route::post)。但现在它会引发其他错误,例如“500 内部服务器错误”
    • @Reshma 您的代码可能会引发您未处理的异常。您应该捕获该异常并检查它以查看实际错误是什么(猜测它可能与 Laravel 或 GoCardless 无关!)php.net/manual/en/language.exceptions.php 是用于异常处理的 PHP 文档,这应该是一个很好的起点主题。
    猜你喜欢
    • 2017-06-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多