Webhook解析后,Gocardless无法执行程序

时间:2019-01-11 10:11:47

标签: php laravel-5.7 gocardless

我正在网站上实现无卡api。我陷入了webhook。当我从沙盒测试环境向我的网站发送一个webhook时,它显示200条响应,但是之后没有任何代码执行。而且我在响应正文中没有看到任何内容,显示为空。

我正在使用laravel 5.7。这是我的代码

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

HomeController.php

SELECT * FROM `table1`
WHERE (`target_1` like '%london%' OR `target_1` like '%paris%')
  AND (`target_2` like '%london%' OR `target_2` like '%paris%')
  AND (`target_3` like '%london%' OR `target_3` like '%paris%')

我试图执行一些数据库查询,但仍然无法正常工作。谁能指出我做错了什么事情和在哪里做?

3 个答案:

答案 0 :(得分:1)

 $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...
        //
        }
}

使用电子邮件将代码发送到调试,在调用webhook时,电子邮件将发送到带有响应正文的地址,然后您将数据存储在电子邮件正文中。 希望你能理解

答案 1 :(得分:1)

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

TypeError

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); } 方法将检查Webhook的签名和您保存的机密。

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

isValid

我们为Laravel创建了一个软件包,可以帮助您处理和处理Gocardless webhooks。

Nestednet/Gocardless-laravel

答案 2 :(得分:0)

得到解决方案。获取标头值时出现问题。在laravel中,您无法使用$headers = getallheaders();获取标头值,而需要使用use Request;然后使用Request::header("Webhook-Signature");来解决我的问题。