首页 > 解决方案 > Azure 函数看不到从 Shopify 正确传递的 JSON 正文

问题描述

我正在为 shopify 商店构建一个基于 Azure 函数应用程序的结帐后流程。这是我第一次在函数的约束下工作。该功能基于powershell。

所以该功能是在本地开发的,为此,我使用 hookbin 复制了 webhook 的 json 主体(从 Shopify 订购/付费),这是一个很棒的工具。然后我在开发它时使用邮递员在函数的本地副本上触发主体。这是 shopifys 示例的片段:

{
  "id": 820982911946154500,
  "email": "jon@doe.ca",
  "closed_at": null,
  "created_at": "2021-02-07T20:48:25+00:00",
  "updated_at": "2021-02-07T20:48:25+00:00",
  "number": 234,
  "note": null,
  ...
}

所以我使用它,似乎很容易。在我的powershell中,我做了一个相当标准的

$RequestBody = $Request.Body | ConvertFrom-JSON

然后我挑选出我需要的东西。

$email_address = $RequestBody.email

当我将 Shopify 和该功能一起加入时,这不起作用。在我收集请求的主体时,我没有得到与 hookbin 相同的东西。

当我尝试转换 json 我得到这个

WARNING: Conversion from JSON failed with error: Unexpected character encountered while parsing value: S. Path '', line 0, position 0.

所以我尝试将正文转储为 $Request.body (在我转换为 json 之前)并得到这个

INFORMATION: System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry 

所以,总而言之,我显然没有得到我期望的严格的 JSON。这是我函数的前几行。

param($Request, $TriggerMetadata)
try {
    $ErrorActionPreference = "Stop"
    Connect-AzAccount -Identity

    # $RequestBody = $Request.Body | convertfrom-json
    Write-host $Request.Body  

我是否错过了一个非常明显的步骤,需要在使用 hookbin 收集尸体时不需要执行的功能中完成?

标签: azurefunctionshopifyazure-powershell

解决方案


看着输出

Write-host $Request.Body  

输出 :

INFORMATION: System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry 

所以看起来你已经有了字典对象(键​​值对)。

如果您必须访问email 密钥的值,您可以直接访问它$request.body.email$request.body["email"]

在执行上述操作之前,您可以先尝试以下步骤:

了解存在哪些键。相应地访问它们。因此您可以尝试Write-Host $request.body.Keys转储与字典对象关联的所有键。


推荐阅读