#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 говорит, что значение, которое я отправляю, неверно. Что я мог сделать не так?