php curl

Erstmal danke für eure Hilfe! Leider funzt es nicht. Ich habe in PM jetzt einieg parameter ausgeschaltet, und es geht trotzdem:


image



Dann habe ich ein leeres Accept-Ecoding in PM übergeben, geht auch:

image



Dann hab ich auch mal den User-Agent mit eurem überschrieben und auch das xml an einer Stelle geändert, um zu überprüfen, daß er auch eine neue order anlegt und ich hier keinem Irrtum aufsitze - auch das klappt problemlos:

image


Auch Accept-Encoding=application/json; charset=utf-8 klappt:

image

Zu Deiner Frage nach der PM Response: Ich weiß nicht genau was Du meinst, das ist doch nur die Meldung daß die Order aufgebaut wurde. Ich habe mir den letzten Call aber in der PM-Konsole angesehen und alles rauskopiert und angehängt


Zur Doku: Zu den Parametern habe ich da nichts weiter gefunden, hier ist der Link:


https://halbmond-orders.de/help/api/import


Dank dir. Das ist wirklich seltsam.

Wir versuchen dem auf die Spur zu kommen.


Kannst du bitte nochmal den Requestbin-Ansatz probieren:


1. gehe auf http://requestbin.net/ und erstelle ein Bin (entferne die checkbox). Das ist wichtig, damit du uns dann die URL schicken kannst, damit wir das untersuchen können. Gern per Ticket.



2. Dadurch kommst du auf eine Seite die dir eine URL zeigt.

An diese URL schickst du deinen Request. Den Browser lässt du auf dieser Seite geöffnet.

a) Request per POSTMan

b) und per Synesty (dazu diese URL bei Host eintragen)

3. Im Browser klickst du dann mal Neu Laden, und dadurch solltest du dann die Requests sehen, die per PostMan und Synesty geschickt wurden.


4. Nach dem du das gemacht hast schickst du uns per Ticket die URL die URL in deinem Browser


Dadurch können wir dann auch sehen, was du dort hingeschickt hast.


Vorteil davon ist, dass wir durch Requestbin eine verlässliche Source-of-Truth, und sehen was auf der Gegenseite ankommt. Die ganzen Logfiles sind zwar auch ok, aber die zeigen eben nicht die Gegenseite sondern nur aus Perpektive der sendenden Partei.



Hallo Micha,


ich habe gerade nochmal den Postman Log mit dem HTTP Log von uns verglichen. Mir ist noch aufgefallen, dass PM den Parameter offenbar noch die Leerzeichen durch + ersetzt ( URL encoded). Im HTTP Log von uns sind die Leerzeichen vorhanden, da es nicht automatisch url encoded wird.


PM Log :


Flow HTTP Log:


Kannst du eventuell nochmal versuchen um den aktuellen "load" Wert noch die Template Funktion urlEncode zu packen. Das sollte dann in etwa so aussehen:


${urlEncode(encodeBase64(xmlData, "UTF-8"))}




DAS war's! Endlich klappt es. Ich hatte schon mit dem Entwickler der API gesprochen und einiges ausprobiert, nichts hatte geholfen. DANKE

Danke für die Rückmeldung. Vielleicht wars das von Anfang an.... Wir schauen uns auch noch mal an, dass wir auch bodyContentType=application/x-www-form-urlencoded mit Key-Value Paaren unterstützen und dass diese dann automatisch URLEncoded werden. Müssen nochmal in die Spec. schauen.



Super! Ja, ich glaub auch, daß das von Anfang an das Problem war

Ich habe mit diesem Thema ein anderes Problem. Und zwar soll ein Spreadsheet zeilenweise abgearbeitet werden, so daß ich diese ganze Methode über einen SpreadsheetURLDownload (SSUD) realisieren muß. Leider scheint der Step aber nur den Inhalt der letzten Zeile des Spreadsheets zu übermitteln. Alle Calls vorher beinhalten keine Daten. Also. Mapper mit 28 Order-Zeilen, die bereits komplett gestylt sind und deren Inhalte in der Spalte base64_Neu stehen. Im SSUD steht im Body:

&token=...(entfernt)
&version=1
&type=xml
&load=${base64_Neu!}


Im Ergebnis werden zwar alle 28 Calls ausgeführt - aber wie gesagt, nur für die Order der letzten Zeile werden Daten übermittelt. Könnt ihr da bitte nochmal reinschauen?


Gruß Micha

Kann es sein, dass du evtl. bei jedem Call immer wieder den gleichen Datensatz erwischt und diesen immer wieder überschreibst? Dadurch sieht es evtl. so aus, als klappt es nur beim letzten.




Nein, kann nicht sein. Quelle ist ein Mapper mit 28 verschiedenen Zeilen. Der SSUD-Step soll sie alle durcharbeiten, das ist (theoretisch) sichergestellt durch


image

im requestBody, was ja die Spalte mit den jeweiligen Orderdaten ist. Mein Verdacht ist, daß das Zusammenspiel aus der Übertragung mit multipart/form-data und der zeilenweisen Abarbeitung nicht klappt. Zu beachten ist hier, daß nicht etwa die Order der ersten, sondern der letzten Zeile dann tatsächlich übermittelt wird. Er scheint also das gesamte Sheet durchzugehen und nur die allerletzten Daten in diese Form zu bringen und zu übermitteln.

Mir fällt gerade ein, daß ich hier schon mal Schwierigkeiten hatte mit einer nexturl-Funktion, wenn der ganze Call wie im vorliegenden Fall ein POST Call ist. Dann klappte das nur, wenn die Formel zur nexturl-Ermittlung nicht im requestBody, sondern im requestHeaders untergebracht war. Ich versuche es jetzt mal, alles da rein zu schreiben.


Wir reden auch vom SpreadsheetURLDownload (SSUD), richtig? weil nexturl() gibt es da gar nicht. nexturl() gibt es nur beim APICall.

Beim SSUD musst du ggf. auch auf den host (also die URL) achten. Ggf. muss dort auch noch ein Wert aus einer Spalte rein.


- Wie genau sieht denn dein RequestBody aus? und wie ist deine batchSize eingestellt?


Diese Doku-Seite beschreibt das nochmal. Vielleicht kannst du anhand der dort erwähnten Vorlage mal ein Beispiel bauen und gegen Requestbin schicken.

Das mit nexturl ist klar, ich wollte nur darauf hinaus, daß der nächste Call bei POST nur funktioniert hatte, wenn die Logik nicht im Body, sondern im Headers steht. In sofern wäre es folgerichtig, daß auch eure Logik der zeilenweisen Abarbeitung nur klappt, wenn die jeweilig abzuarbeitende Spalte im headers-Bereich referenziert wird.

Geht aber auch nicht - diesmal wird gar nichts aufgebaut

Es ist schwer nachzuvollziehen. Kannst du Screenshots oder ähnliches schicken?


"wenn die Logik nicht im Body, sondern im Headers steht"

Wenn du sowas schreibst: kannst du den Feldinhalt der beiden Felder hier schicken?

Das sind erstmal 2 getrennte Felder, die nichts mit einander zu tun haben. Die werden so wie sie sind übermittelt.








Hallo Micha,


wir können dir leider gerade nicht wirklich folgen. Im SpreadsheetUrlDownload Step entspricht die Anzahl der Calls immer der Zeilenanzahl deines Input Spreadsheets (bei batchSize = 1). Eine extra Logik für die Ausführung gibt es im Gegensatz zum API Call Step nicht.

So wie es in deinem Request Body angeben ist, wird pro Call jeweils der Wert aus der Spalte "base64_Neu" für dem "load" Parameter verwendet. Wir haben das auch gerade nochmal für POST und multipart/form-data getestet und es hat funktioniert.

Den Request Body solltest du auch schon in der Vorschau des SpreadsheetUrlDownload Step sehen. Der Wert für "load" sollte sich in der Spalte requestBody in den einzelnen Zeilen unterscheiden.



Viele Grüße

Torsten



Mea culpa! Ich hatte einen Fehler bei einem SplitToRows-Vorgang gemacht, so daß nur die letzte Zeile fehlerfrei blieb. Entschuldigt bitte den Aufwand!