PDF per API übertragen

Hallo Team,

ich habe schon einiges gelesen, auch einen ähnlich gelagerten Thread, der aber offenbar zu keinem Ergebnis führte. jedenfalls: Ich muß eine PDF-Rechnung über die API an einen Marktplatz übermitteln. Der Call wird per POST übermittelt. Ich habe bereits in einem vorhergehenden Step für jede Zeile den jeweiligen payload zusammengestellt. Im folgenden SpreadsheetUrlDownload-Step steht dann im Body:
image

Die host-Zeile lautet:
image

In den Einstellungen habe ich:
image

Das klappt aber nicht - ich habe den Flow im Debug-Modus laufen lassen, weil in der Vorschau die errorMessage abgeschnitten wird. Komplett lautet sie:

Ich bitte um Hilfe…

Danke und Gruß, Micha
podcomm e-commerce management

Keiner, der helfen kann?

Die Response liest sich so, als ob keine Datei übermittelt wurde.

image

Entspricht dies :point_up: wirklich einem Dateinamen, der in der Liste bei filesToUpload dabei ist?
Aus dem Bauch heraus, hätte ich jetzt dort noch ein .pdf am Ende erwartet. Aber kann auch sein, dass das schon in ${Document} drin steht. Das war in deinen Screenshots nicht ersichtlich.

Ansonsten schick mal den Request an Tools wie https://beeceptor.com/ oder so.

Selbst wenn ich einen in der Filelist existierenden Dateinamen direkt einsetze, erhalte ich dasselbe:

image


==>

Hallo Micha,

schwer zu sagen woran es scheitert. Die Fehlermeldung kommt vom API Endpunkt und deutet darauf hin das die „multipart boundaries“ nicht vorhanden sind. Das bedeutet nicht, dass die Datei nicht gesendet wird.
Ich habe das gerade nochmal mit ähnlichen Testdaten probiert und konnte auf den ersten Blick kein Problem erkennen. Boundaries, Datei und request body sind vorhanden:

Eine Vermutung habe ich noch. Eventuell kann der gesamte request body nicht geparst werden, weil im JSON doppelte Anführungszeichen enthalten sind.
Kannst du bitte mal im requestBody probieren noch ein ?json_string an myjsonpayload hängen

jsonpayload=<#compress>${myjsonpayload?json_string}</#compress>

Viele Grüße
Torsten

Hallo Torsten, das klappt leider auch nicht. Können wir das mal vergleichen? Ich habe den Call über Postman erfolgreich absetzen können und grübele gerade über dessen Log und dem Run-DebugLog. Ich kaufe auch gerne Deine Dienstleistung ein, ich muß das jedenfalls umsetzen.

Ich sehe hier zwei ominöse Punkte: Es wird ja ein Mix aus xml im Body und dem pdf-File übermittelt. Wenn ich mir die Sektionen ansehe, fällt mir auf:

Zum pdf:
Postman:


Synesty:

Ich nehme aber an, daß das korrekt ist, weil ihr das pdf ja irgendwie codiert übertragt?

Dann zum body:
Postman:


Synesty:

Hier fällt auf, daß kein Content-Type mitgegeben wird, obwohl ich ihn eingestellt habe:

image

Hilft das weiter?

Danke und Gruß, Micha
podcomm e-commerce management

Hallo Micha,

der Content-Type der einzelnen Teile in einem multipart request lässt sich im SpreadsheetUrlDownload leider (noch) nicht festlegen. Der BodyContentType bezieht sich im SpreadsheetUrlDownload auf den Content-Type im request header. Sobald eine Datei & ein Request Body vorhanden sind, wird es automatisch auf multipart/form-data gesetzt.

Kannst du im Postman den request bitte nochmal mit den Content-Types des SpreadsheetUrlDownload Steps ausprobieren? Erhälts du dann auch den Fehler?

Viele Grüße
Torsten

Nein, auch bei application/octet-stream beim pdf funktioniert es in Postman:

image

Ich habe übrigens auch gecheckt, ob das Dokument wirklich hinterlegt wurde - das ist der Fall.

Außerdem: Ich habe in PM bei body content-Type statt application/xml mal multipart/form-data eingegeben - auch damit klappt es!! Das Problem muß woanders liegen. In PM kann ich leider nicht sehen, was da eigentlich genau mit dem pdf gemacht wird, anders als in eurem DebugLog. Ich stelle nur fest, daß PM einen boundary-Wert ausgibt:

image

Im DebugLog:

Zu „boundary“ gibt’s da gar keine Information. Im DebugLog gibt es an einigen Stellen dann diesen Eintrag:

image

im normalen Log steht:

Das Seltsame finde ich: Im DebugLog steht nichts von diesem ganzen Text drin (Failed to parse servlet…) außer dem 400 Bad Request. Ich kenne mich in dieser Tiefe aber nicht aus, habe aber den Eindruck, daß dieser Text nicht von der H24-API kam.

Es ist ziemlich frustrierend, daß das nicht funktioniert. Hast Du noch eine Idee, wo ihr ansetzen könntet?

Gruß Micha

Jetzt kommt der Hammer: Ich habe mal spaßeshalber einen einfachen APICall dafür angelegt - damit funktioniert es!!

Hallo Micha,

das klingt sehr spannend. Die Steps sollten sich beim FileUpload nicht (wirklich) unterscheiden. Kannst du uns eventuell einen Flow Export mit den beiden Steps und deinen Einstellungen per Ticket schicken. Dann würden wir nochmal genau schauen, wo die Unterschiede liegen.

Zu:

Der Text „Failed to parse…“ stammt mit großer Sicherheit aus der Response (Antwort der API). Die Nachricht sollte auch im Debug Log zu finden sein, wenn sie im Eventlog ausgegeben wird.

Viele Grüße
Torsten