【问题标题】:How do I get a Webhook JSON written to the Cloud Firestore?如何将 Webhook JSON 写入 Cloud Firestore?
【发布时间】:2021-09-22 14:28:31
【问题描述】:

我有一个 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 发送到云存储,但我也没有设法让它工作。我想我可能需要将身份验证集成到 HTTP 请求标头中才能成功。

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

【问题讨论】:

    标签: json firebase api google-cloud-firestore webhooks


    【解决方案1】:

    什么触发了 webhook? 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。

    【讨论】:

    • 在 WooCommerce 上下订单时,会触发 Webhook 并生成发送到指定 URL 所需的 JSON。
    • @StephenStilwell 是的,您输入云函数的 URL 作为指定的 URL。您的 webhook 数据将位于 req.body
    【解决方案2】:

    经典方法是使用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 代码发送回调用者。

    【讨论】:

    • 我看过你链接的视频系列。它似乎是在考虑实时数据库的情况下创建的,但视频分享了有关错误处理可能被拒绝的未决承诺的良好信息。
    • 从管理错误的角度来看,它与 Firestore 相同。如果出现错误(哪个 HTTP 错误代码?),这一切都取决于您需要返回到 WooCommerce 服务的内容。要写入 Firestore,请参阅框架代码。您需要知道要写入哪个集合和哪个文档以及要写入什么:您可能会从请求中包含的 JSON 中获取此信息。
    猜你喜欢
    • 2021-11-25
    • 2021-11-20
    • 2020-06-02
    • 2021-11-27
    • 2018-03-20
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多