我试图在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没有找到方法"作为回应。
我如何解决这个问题?
答案 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的形式返回数据,例如