Php Gocardless在webhook解析后不执行程序

Php Gocardless在webhook解析后不执行程序,php,laravel-5.7,gocardless,Php,Laravel 5.7,Gocardless,我正在我的网站上实现gocardless api。我被网钩卡住了。当我将一个webhook从沙盒测试环境发送到我的网站时,它显示了200个响应,但之后没有代码执行。而且我也没有看到身体的任何反应,它显示为空 我用的是laravel 5.7。这是我的密码 route.php 路由::post('/webhook','HomeController@webhook'); HomeController.php public function webhook() { $webhook_endpo

我正在我的网站上实现gocardless api。我被网钩卡住了。当我将一个webhook从沙盒测试环境发送到我的网站时,它显示了200个响应,但之后没有代码执行。而且我也没有看到身体的任何反应,它显示为空

我用的是laravel 5.7。这是我的密码

route.php 路由::post('/webhook','HomeController@webhook');

HomeController.php

public function webhook() 
{
    $webhook_endpoint_secret = env("GOCARDLESS_WEBHOOK_ENDPOINT_SECRET");
    $request_body = file_get_contents('php://input');

    $headers = getallheaders();
    $signature_header = $headers["Webhook-Signature"];

    try {
        $events = Webhook::parse($request_body, $signature_header, $webhook_endpoint_secret);

        foreach ($events as $event) {
            print("Processing event " . $event->id . "\n");

            switch ($event->resource_type) {
                case "mandates":
                    $this->process_mandate_event($event);
                    break;
                default:
                    print("Don't know how to process an event with resource_type " . $event->resource_type . "\n");
                    break;
            }
        }

        header("HTTP/1.1 204 OK");
    } catch(InvalidSignatureException $e) {
        header("HTTP/1.1 498 Invalid Token");
    }
}


public function process_mandate_event($event)
{
    switch ($event->action) {
        case "cancelled":
            print("Mandate " . $event->links["mandate"] . " has been cancelled!\n");
            break;
        default:
            print("Don't know how to process a mandate " . $event->action . " event\n");
            break;
    }
}
我试图执行一些数据库查询,但没有任何结果。有人能指出我做错了什么和哪里吗?

$responseBody=file\u get\u contents('php://input');
 $responseBody = file_get_contents('php://input');

if ($responseBody <> "") {
    $response_new = json_decode($responseBody, true);
    foreach ($response_new["events"] as $event) {
        print_r($event); // you will see all the data which you want
        //if($event['resource_type'] == 'subscriptions')
        //payments,mandates or etc...
        //
        }
}
如果($responseBody“”){ $response\u new=json\u decode($responseBody,true); foreach($response_new[“events”]作为$event){ print_r($event);//您将看到所需的所有数据 //如果($event['resource_type']=='subscriptions') //付款、委托书等。。。 // } } 使用电子邮件发送代码进行调试,当webhook调用时,电子邮件将发送到您的地址,并带有响应正文,然后您将在电子邮件正文中显示数据。 希望您理解

$responseBody=file\u get\u contents('php://input');
如果($responseBody“”){
$response\u new=json\u decode($responseBody,true);
foreach($response_new[“events”]作为$event){
print_r($event);//您将看到所需的所有数据
//如果($event['resource_type']=='subscriptions')
//付款、委托书等。。。
//
}
}
使用电子邮件发送代码进行调试,当webhook调用时,电子邮件将发送到您的地址,并带有响应正文,然后您将在电子邮件正文中显示数据。
希望您理解

得到了解决方案。我在获取标题值时遇到问题。在laravel中,无法使用
$headers=getallheaders()获取标题值
您需要使用
使用请求Request::header(“Webhook签名”)解决了我的问题。

得到了解决方案。我在获取标题值时遇到问题。在laravel中,无法使用
$headers=getallheaders()获取标题值
您需要使用
使用请求Request::header(“Webhook签名”)解决了我的问题。

使用Laravel及其结构处理webhook的最佳方法是添加一个中间件来验证webhook签名:

 public function handle($request, Closure $next)
    {
        $signature = $request->header('Webhook-Signature');

        if (!$signature) {
            throw WebhookFailed::missingSignature();
        }

        if (!$this->isValid($signature, $request->getContent(), $request->route('configKey'))) {
            throw WebhookFailed::invalidSignature($signature);
        }

        return $next($request);
    }
isValid
方法将检查webhook的签名和您保存的秘密

然后在控制器上,您可以处理来自webhook的事件(记住Gocardless可以在单个webhook请求中发送多个事件)

public函数调用(请求$Request)
{
$payload=$request->input();
foreach($payload['events']作为$event){
//在活动中,你需要做什么就做什么。
}
}
return response()->json(['message'=>'ok']);
}
我们已经为Laravel创建了一个包,它可以帮助您处理Gocardless Webhook


使用Laravel及其结构处理webhook的最佳方法是添加一个中间件来验证webhook签名:

 public function handle($request, Closure $next)
    {
        $signature = $request->header('Webhook-Signature');

        if (!$signature) {
            throw WebhookFailed::missingSignature();
        }

        if (!$this->isValid($signature, $request->getContent(), $request->route('configKey'))) {
            throw WebhookFailed::invalidSignature($signature);
        }

        return $next($request);
    }
isValid
方法将检查webhook的签名和您保存的秘密

然后在控制器上,您可以处理来自webhook的事件(记住Gocardless可以在单个webhook请求中发送多个事件)

public函数调用(请求$Request)
{
$payload=$request->input();
foreach($payload['events']作为$event){
//在活动中,你需要做什么就做什么。
}
}
return response()->json(['message'=>'ok']);
}
我们已经为Laravel创建了一个包,它可以帮助您处理Gocardless Webhook


我正在关注官方文件。你的方法已经过时了,你能看一下文档吗?这里是链接。。。我在看官方文件。你的方法已经过时了,你能看一下文档吗?这里是链接。。。