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

How to get data via Webhook? (GoCardless)

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

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

{
  "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.php 发送一个 Webhook,代码如下:

 <?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'] 的数据,但在底部你可以看到我只得到空数组。

这是关于密钥 (qpILcgnnAWznkuJcajXYvMNsQcrkKwDzL6KHMq5z) 的吗?

我不知道如何设置。

我搜索了很多之后才找到一个例子。也许这对其他人有帮助。请注意,大多数代码似乎已被弃用,但你会知道,当你研究了最新的 GoCardless API:

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

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");
}

有关处理 webhook 的完整指南,请参阅 GoCardless 的 getting started guide。它还向您展示了如何使用密钥来确保 Webhook 确实来自 GoCardless,并且没有被欺骗。

您已在此 post 中包含您的 webhook 秘密,因此您现在需要重置它,否则有人可能会向您发送伪装成 GoCardless 的虚假 webhook。您可以在 sandbox GoCardless dashboard 中点击左侧的 "Developer",然后点击您的端点,然后点击 "Edit"。