如何通过Webhook获取数据? (GoCardless)

时间:2017-03-01 19:33:29

标签: php httprequest webhooks

我是第一次使用Webhooks进行测试。我想建立一个Webhook(使用GoCardless.com,但现在这不重要)。

我在沙盒中,我在那里设置了一个Webhook:

x

然后我尝试使用此代码向我的{ "id": "WE000012RYRQ9E", "created_at": "2017-03-01T18:03:34.252Z", "enabled": true, "secret": "qpILcgnnAWznkuJcajXYvMNsQcrkKwDzL6KHMq5z", "name": "TestHook", "url": "https://example.com/webhook.php", "client_cert_details": null, "links": {} } 发送Webhook:

webhook.php

您可以在此处查看结果:

enter image description here

所以,我假设我会显示 <?php header('Content-Type: application/json'); $result = $_REQUEST['events']; $obj = json_decode($result, true); print_r($_GET); print_r($_POST); print_r($_REQUEST); print_r($result); print_r($obj); 显示的数据,但在底部你可以看到我只返回空数组。

这是关于密钥($_REQUEST['events'])的吗?

我不知道如何设置它。

2 个答案:

答案 0 :(得分:2)

webhook数据作为请求正文中的JSON发送到您的服务器。在PHP中,您需要使用file_get_contents('php://input')访问它。

获得正文后,您可以将其解码为数组,然后根据需要处理数据:

$raw_payload = file_get_contents('php://input');
$payload = json_decode($raw_payload, true);

// Each webhook may contain multiple events to handle, batched together
foreach ($payload["events"] as $event) {
    // Do something with the event here
    print("Processing event " . $event["id"] . "\n");
}

有关处理webhooks的完整指南,请参阅GoCardless的getting started guide。这也告诉你如何使用密钥来确保webhook真正来自GoCardless,并且没有被欺骗。

你已经在这篇文章中包含了你的webhook秘密,所以你现在想要重置它,否则有人可能会发送伪装成GoCardless的虚假webhook。您可以在sandbox GoCardless dashboard中点击左侧的“开发者”,然后点击您的终端,然后点击“修改”。

答案 1 :(得分:0)

我经常搜索后找到一个例子。也许这有助于其他人。请注意,大多数代码似乎都已被弃用,但是当您研究了最新代码GoCardless API时,您就会知道:

https://github.com/gocardless/gocardless-legacy-php/blob/master/examples/webhooks.php