首页 > 解决方案 > Amazon Vendor Central - 如何创建散列工资单?

问题描述

我正在尝试向亚马逊发送 API 调用的 vb.net 项目。每次我尝试时,我都会收到一条消息,说我的“有效负载”的散列版本不正确。我可以通过 Postman 发送请求(它似乎正在为我计算哈希值),但无法弄清楚如何在 vb.net 中对其进行编码 如何为亚马逊正确创建哈希?

我正在按照这里的说明进行操作:https ://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

在这种情况下,我在第 6 步,上面写着“使用 SHA256 之类的散列(摘要)函数从 HTTP 或 HTTPS 请求正文中的有效负载创建散列值。” 然后它给出了例子

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

第一,我猜有问题的“有效负载”是我的 API 请求的主体。太长在这里发布它,但我指的是看起来像这样的代码:

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

第二,我使用的代码改编自另一个创建哈希的同事 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

亚马逊说我发送的价值不正确。我可能做错了什么?

标签: vb.netamazon-web-servicessha256payloadamazon-vendor-central

解决方案


推荐阅读