如何将 Webhook JSON 写入 Cloud Firestore?

How do I get a Webhook JSON written to the Cloud Firestore?

我有一个 WooCommerce Webhook 要我发送 JSON 到 URL,我相信这是一个 POST http 请求。

我已经使用 Webhook.site 测试了 Webhook,它显示了正确的 JSON 负载。

开发人员建议我使用云函数接收 JSON、解析 JSON 并将其写入 Cloud Firestore。

是否有关于 Cloud Functions for Firebase 或 Google Cloud Platform 的 Cloud Functions 的详细说明此过程的文档?

我在 Cloud Firestore 文档中没有找到任何内容。

另一个可用的解决方案可能是将 Webhook JSON 发送到 Cloud Storage,但我也未能成功。我想我可能需要将身份验证集成到 HTTP 请求中 headers 才能成功。

参考资料和文档:
“使用 Cloud Functions 扩展 Cloud Firestore”https://firebase.google.com/docs/firestore/extend-with-functions
“云函数 - HTTP 函数”https://cloud.google.com/functions/docs/writing/http

什么触发了 webhook?当文档为 created/modified/deleted 而不是任何外部事件时,Firestore 触发器起作用。您可能正在寻找 (Firebase) Call functions via HTTP requests(您也可以直接使用 Google Cloud Functions 执行相同操作)。您可以编写如下所示的函数:

exports.myWebhookFunction = functions.https.onRequest((req, res) => {

  const webhookBody = req.body;
  // parse data
  // Add to Firestore/Storage

  // Terminate function
});

当您部署此功能时,您将获得一个 URL(来自 CLI 或也在仪表板中),您可以在您的 WooCommerce webhook 中设置一个 webhook 交付 URL。

经典方法是使用 HTTPS Cloud Function,它将在以下 URL 处公开端点:https://<region>-<project-id>.cloudfunctions.net/<cloud-function-name>

这里有一个代码框架,作为基础:

// cloud-function-name = myWebhook
exports.myWebhook = functions.https.onRequest(async (req, res) => {
    const body = req.body; //body is an array of JavaScript objects

    // Get the details of the WooCommerce event, most probably from the body
    const updateObj = {...}

    // Write to Firestore

    await admin.firestore().collection('...').doc('...').set(updateObj);

    return res.status(200).end();

});

在这个官方 video 中有关于这种 Cloud Functions 的更多详细信息,包括如何管理错误以及如何将相应的 HTTP 代码发送回调用者。