我正在网站上实现无卡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%')
我试图执行一些数据库查询,但仍然无法正常工作。谁能指出我做错了什么事情和在哪里做?
答案 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。
答案 2 :(得分:0)
得到解决方案。获取标头值时出现问题。在laravel中,您无法使用$headers = getallheaders();
获取标头值,而需要使用use Request;
然后使用Request::header("Webhook-Signature");
来解决我的问题。