#azure #function #shopify #azure-powershell
#azure #функция #shopify #azure-powershell
Вопрос:
Я создаю процесс оформления заказа на основе приложения Azure function для магазина Shopify. Это мой первый раз, когда я работаю в рамках ограничений функций. Эта функция основана на powershell.
итак, функция была разработана локально, для этого я взял копию json-тела webhook (заказ / оплата с Shopify) с помощью hookbin, который является потрясающим инструментом. Затем я использовал postman для запуска тела в локальной копии функции при ее разработке. Это фрагмент примера 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.тело (до того, как я преобразовал в 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?
Ответ №1:
Глядя на вывод
Write-host $Request.Body
Вывод :
INFORMATION: System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry System.Collections.DictionaryEntry
Похоже, у вас уже есть объект dictionary (пара ключ-значение).
если вам нужно получить доступ к значению email
ключа you, вы можете напрямую получить к нему доступ как $request.body.email
или $request.body["email"]
Прежде чем выполнять вышеуказанное, вы можете сначала попробовать следующие шаги :
Чтобы понять, какие ключи присутствуют. Соответственно, получите к ним доступ.Таким образом, вы можете попробовать выполнить Write-Host $request.body.Keys
сброс всех ключей, связанных с объектом dictionary.
Комментарии:
1. это. я понял это примерно в то время, когда вы опубликовали сообщение, выполнив поиск на github кода других функций в ps. я не знаю, почему функции Azure собирают и преобразуют JSON для вас, но это то, что он делает. Спасибо.