Amazon Vendor Central — Как создать хэшированную зарплату?

#vb.net #amazon-web-services #sha256 #payload #amazon-vendor-central

Вопрос:

Я работаю в vb.net проект, пытающийся отправить вызов API в Amazon. Каждый раз, когда я пытаюсь, я получаю сообщение о том, что хэшированная версия моей «полезной нагрузки» неверна. Я могу отправить запрос нормально через почтальона (который, похоже, вычисляет для меня значения хэша), но не могу понять, как его закодировать vb.net Как правильно создать хэш для Amazon?

Я следую инструкциям отсюда: https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

В этом случае я нахожусь на шаге 6, в котором говорится: «Используйте функцию хэширования (дайджеста), такую как SHA256, для создания хэшированного значения из полезной нагрузки в теле запроса HTTP или HTTPS». Затем он приводит пример

 HashedPayload = Lowercase(HexEncode(Hash(requestPayload)))
 

1-й, я предполагаю, что «полезная нагрузка», о которой идет речь, является телом моего запроса API. Слишком долго, чтобы публиковать все это здесь, но я имею в виду код, который выглядит так:

 RequestBody body = RequestBody.create(mediaType, "{rn    "invoices": [ rn        { rn            "invoiceType": "Invoice", rn            "id": "INV0127266", rn            "date": "2021-04-22T00:00:00.0000000-04:00", rn            "remitToParty": { rn                "partyId": 
 

2-й, я использую код, адаптированный из другого кода C# для сотрудников, который создает хэш:

 Dim hashBody = HashAndHex(strInvoice)

Private Function HashAndHex(ByVal value As String) As String
    Dim data As Byte() = New SHA256CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(value))
    Dim sb As StringBuilder = New StringBuilder()

    For i As Integer = 0 To data.Length - 1
        sb.Append(data(i).ToString("x2", CultureInfo.InvariantCulture))
        'sb.Append(data(i).ToString("x2"))
    Next

    Return sb.ToString()
End Function
 

Amazon говорит, что значение, которое я отправляю, неверно. Что я мог сделать не так?