我正试着在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找不到方法“。
我该如何解决这个问题呢?
发布于 2017-12-08 21:25:54
您看到的HTTP 405 error表明您的Laravel应用程序不知道如何处理传入请求的method。
GoCardless webhooks use the POST method向您发送带有JSON的请求,但是您所编写的路由是用于处理GET请求(Route::get)的。要解决此问题,您应该将POST请求的define a route发送到将接收webhooks的端点。
发布于 2017-12-08 19:30:21
一些注释和修复
备注
为什么在您的路由中包含“丑陋的”.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形式的数据。
https://stackoverflow.com/questions/47713243
复制相似问题