【问题标题】:how to capture shopify webhook payload to use for local development?如何捕获 shopify webhook 有效负载以用于本地开发?
【发布时间】:2021-02-16 20:07:44
【问题描述】:

我正在尝试编写一些 azure 函数,这些函数将在 Shopify 订单发送 webhook 后进行一些相当简单的集成。

我遇到了一个概念性问题,希望能得到一些帮助。

我正在尝试在 Postman 中模拟 webhook。为此,我使用 Hookbin 来收集 Shopify 的输出,并且身体通过了一点这样的方式

{
  "id": 3207753990315,
  "email": "mattshort77@gmail.com",
  "closed_at": null,
  "created_at": "2021-02-02T21:44:18+00:00",
  "updated_at": "2021-02-02T21:44:19+00:00",
  "number": 28,
  "note": "",
  "total_price": "10.00",\
  ....
}

我认为这是 json 格式的。 所以我从 hookbin 拿了这个,把它放进了邮递员电话的正文(原始)中。使用 azure 函数的本地地址。 (我在 Mac 上的 VS Code 中编码)。当我发送它时它工作正常。在函数中,我可以收集 $Request.Body 并从 JSON 格式转换。

当我将我的功能提升为天蓝色时,问题就出现了。 Azure 函数以 $Request 形式接收自定义对象,因此不需要从 JSON 行转换。

我需要了解如何将我从 Hookbin 获得的 JSON 模拟成与函数接收的对象相同的格式,因为这会加快我的开发流程负载。并且只是一个更好的模式来公平。我非常确定这是我错误的步骤。在使用 Hookbin 收集有效负载时,我得到了订单的 JSON 格式,但这不是它在 Azure 函数中的接收方式,根据文档将 $Request 呈现为对象。

【问题讨论】:

    标签: powershell azure-functions


    【解决方案1】:

    Azure Functions 主机的美妙之处在于您无需担心自己转换 JSON(取决于您的 Postman 请求的构造方式。

    例如,这里我使用 POST 方法通过 JSON 有效负载发送到我的函数。

    如果对您的函数使用POST 方法,那么它将自动填充到$Request.Body,而如果您使用GET,它将自动填充$Request.Query

    JSON 对象已为您序列化,因此您无需在函数内从 JSON 进行转换。

    我的函数如下所示:

    using namespace System.Net
    
    # Input bindings are passed in via param block.
    param (
        $Request,
        $TriggerMetadata
    )
    
    # Interact with query parameters or the body of the request.
    $deserializedObject = $Request.Body
    
    # Associate values to output bindings by calling 'Push-OutputBinding'.
    Push-OutputBinding -Name Response -Value (
        [HttpResponseContext]@{
            StatusCode = [HttpStatusCode]::OK
            Body = $deserializedObject
        }
    )
    

    调试该函数以检查传入的值,您可以看到它已自动转换为哈希表,而无需我在函数内调用 ConvertFrom-Json

    您可以看到,我也不必使用ConvertTo-Json 将结果输出到Push-OutputBinding,并且 Insomnia 中的返回值是 JSON。

    我不确定您如何设置本地环境进行测试,但使用功能核心工具应该允许您在本地运行和执行函数,并且应该与在 Azure 中执行的相同。

    【讨论】:

    • 我遇到了很多问题,但您在这里介绍了它们。我混合使用了 post 和 get 查询。但我也没有从邮递员那里全面发送有效的 json。感谢您的发帖,我现在有了更好的开发流程。
    【解决方案2】:

    $Request.RawBody 可能会给你你所需要的。

    【讨论】:

    • 建议您可以在此文本中添加更多详细信息作为答案,以便其他用户也可以从中学习/受益。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2017-05-12
    • 2023-01-25
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多