Dim hc As New HttpClient("https://mws.amazonservices.com")
Dim xmlsj As String = hc.GetData()
Dim doc As New Xml.XmlDocument
doc.LoadXml(xmlsj)
Dim sURL As String = "https://mws.amazonservices.co.uk/Orders/2013-09-01"
Dim sRequest As String = ""
sRequest &= "AWSAccessKeyId=" & UrlEncode("remove")
sRequest &= "&Action=" & UrlEncode("ListOrders")
sRequest &= "&CreatedAfter=" & UrlEncode("2018-09-01T01:51:17Z").ToUpper()
sRequest &= "&MWSAuthToken=" & UrlEncode("remove")
sRequest &= "&MarketplaceId.Id.1=" & UrlEncode("A1F83G8C2ARO7P")
sRequest &= "&OrderStatus.Status.1=" & UrlEncode("Unshipped")
sRequest &= "&OrderStatus.Status.2=" & UrlEncode("PartiallyShipped")
sRequest &= "&SellerId=" & UrlEncode("remove")
sRequest &= "&SignatureMethod=" & UrlEncode("HmacSHA256")
sRequest &= "&SignatureVersion=" & UrlEncode("2")
sRequest &= "&Timestamp=" & UrlEncode(doc.DocumentElement.FirstChild.Attributes.GetNamedItem("timestamp").Value).ToUpper().Remove(23,4)
sRequest &= "&Version=" & UrlEncode("2013-09-01")
Dim StringToSign As String = "GET\n" & "mws.amazonservices.co.uk\n" & "/Orders/2013-09-01\n" & sRequest
output.show(StringToSign)
Dim myEncoder As New System.Text.UTF8Encoding
Dim Key() As Byte = myEncoder.GetBytes("remove")
Dim XML() As Byte = myEncoder.GetBytes(StringToSign)
Dim myHMACSHA256 As New System.Security.Cryptography.HMACSHA256(Key)
Dim HashCode As Byte() = myHMACSHA256.ComputeHash(XML)
Dim result = Convert.ToBase64String(HashCode) ‘和调试器输出的结果不一致,调试器使用POST,代码用的GET
Dim s As String = result
Dim b As new StringBuilder
For Each c As Char In s
Dim v As String = UrlEncode(c)
If v.Length > 1 Then
b.Append(UrlEncode(c).ToUpper())
Else
b.Append(c)
End If
Next
Output.Show(b.ToString)
Dim qm As String = b.ToString
sRequest &= "&Signature=" & qm
Dim URL As String = sURL & "?" & sRequest
Dim xmlorders As New HttpClient(URL)
Dim str As String = xmlorders.GetData()
Output.Show(str)
调试器:https://mws.amazonservices.co.uk/scratchpad/index.html,不考虑最终的请求,在调试器里输入remove也可以算出base64,
调试器用的是POST,代码用的GET