Hallo,
kennt sich jemand mit der Amazon SP-API aus? Im März nächsten Jahres nicht Amazon nur noch JSON-Dateien im Upload an. d.h. ich muß meine bisherige csv/xml-Daten auf JSON umstellen. Leider kann ich dazu die bisher genutzte API (github.com/abuzuhri/Amazon-SP-…ampleCode/OrdersSample.cs) nicht mehr nutzen, da es dort bislang keine Funktion zum Upload gibt.
Ich habe mir mit Hilfe von CoPilot nun einen großen Teil der neuen Anbindung zusammengestellt. Ich kann mich damit zumind. erfolgreich bei Amazon authentifizieren und bekomme auch als Antwort die dazu notwendige Upload URL.
Ich bekomme dort etwas, das so aussieht:
: {"feedDocumentId":"amzn1.tortuga.4.eu.04a23f8b-1531-4434-9273-b72bd0947dcb.T1FB0CERNW7JJM","url":"https://tortuga-prod-eu.s3-eu-west-1.amazonaws.com/04a23f8b-1531-4434-9273-b72bd0947dcb.amzn1.tortuga.4.eu.T1FB0CERNW7JJM?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241203T155150Z&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Expires=300&X-Amz-Credential=AKIAXXXXXXXX53%2F20241203%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Signature=a18a2217fb996e8e67a8553f940887be0ab1c782c062f19c5725dc4f7ebc4c34"}
Soviel ich die furchtbare Doku verstanden hab, muß ich nun mittels Put an diese URL meine JSON-Daten hochladen. Dazu habe ich folgende Funktion:
Als Fehler bekomme ich da aber immer:
Fehler beim Hochladen der Daten: 403
Details: <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
Was ich nicht verstehe, da die zurückgegebenen Upload-URL meines wissens bereits die Signatur von Amazon enthält.
Kann mir hier jemand (gerne auch gegen Bezahlung) helfen?
kennt sich jemand mit der Amazon SP-API aus? Im März nächsten Jahres nicht Amazon nur noch JSON-Dateien im Upload an. d.h. ich muß meine bisherige csv/xml-Daten auf JSON umstellen. Leider kann ich dazu die bisher genutzte API (github.com/abuzuhri/Amazon-SP-…ampleCode/OrdersSample.cs) nicht mehr nutzen, da es dort bislang keine Funktion zum Upload gibt.
Ich habe mir mit Hilfe von CoPilot nun einen großen Teil der neuen Anbindung zusammengestellt. Ich kann mich damit zumind. erfolgreich bei Amazon authentifizieren und bekomme auch als Antwort die dazu notwendige Upload URL.
Ich bekomme dort etwas, das so aussieht:
: {"feedDocumentId":"amzn1.tortuga.4.eu.04a23f8b-1531-4434-9273-b72bd0947dcb.T1FB0CERNW7JJM","url":"https://tortuga-prod-eu.s3-eu-west-1.amazonaws.com/04a23f8b-1531-4434-9273-b72bd0947dcb.amzn1.tortuga.4.eu.T1FB0CERNW7JJM?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20241203T155150Z&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Expires=300&X-Amz-Credential=AKIAXXXXXXXX53%2F20241203%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Signature=a18a2217fb996e8e67a8553f940887be0ab1c782c062f19c5725dc4f7ebc4c34"}
Soviel ich die furchtbare Doku verstanden hab, muß ich nun mittels Put an diese URL meine JSON-Daten hochladen. Dazu habe ich folgende Funktion:
VB.NET-Quellcode
- Public Async Function UploadJsonToAmazonAsync(signedUrl As String, jsonData As String) As Task
- Try
- ' Debugging: URL und Body loggen
- RichTextBox1.AppendText("Signed URL: " & signedUrl & vbCrLf)
- RichTextBox1.AppendText("JSON Body: " & jsonData & vbCrLf)
- ' HttpClient für die Anfrage erstellen
- Using client As New HttpClient()
- ' Content-Type setzen
- Dim content As New StringContent(jsonData, Encoding.UTF8, "application/json")
- ' Payload-Hash berechnen
- Dim payloadHash = BitConverter.ToString(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(jsonData))).Replace("-", "").ToLower()
- ' client.DefaultRequestHeaders.Add("x-amz-content-sha256", payloadHash)
- ' Protokollierung der Anfrage
- RichTextBox1.AppendText("Request Headers:" & vbCrLf)
- For Each header In client.DefaultRequestHeaders
- RichTextBox1.AppendText(header.Key & ": " & String.Join(", ", header.Value) & vbCrLf)
- Next
- ' PUT-Anfrage an die signierte URL senden
- Dim response As HttpResponseMessage = Await client.PutAsync(signedUrl, content)
- ' Erfolgreiche Antwort prüfen
- If response.IsSuccessStatusCode Then
- RichTextBox1.AppendText("Feed-Daten erfolgreich hochgeladen." & vbCrLf)
- Else
- ' Fehler protokollieren
- Dim errorDetails As String = Await response.Content.ReadAsStringAsync()
- RichTextBox1.AppendText("Fehler beim Hochladen der Daten: " & response.StatusCode & vbCrLf)
- RichTextBox1.AppendText("Details: " & errorDetails & vbCrLf)
- End If
- End Using
- Catch ex As Exception
- ' Fehlerbehandlung
- RichTextBox1.AppendText("Fehler: " & ex.Message & vbCrLf)
- End Try
- End Function
Als Fehler bekomme ich da aber immer:
Fehler beim Hochladen der Daten: 403
Details: <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
Was ich nicht verstehe, da die zurückgegebenen Upload-URL meines wissens bereits die Signatur von Amazon enthält.
Kann mir hier jemand (gerne auch gegen Bezahlung) helfen?