Gelöst Web-Request Beispiel

giluano

Mitglied
19. Juni 2021
21
2
Hallo zusammen,

ich versuche schon seit 2 Tagen vergebens einen funktionierenden Web-Request (POST) hinzubekommen und bin echt am verzweifeln.

Wenn ein Auftrag erstellt wurde, sollen die Artikeldaten (artikelnummer, menge) an meinen Server gesendet werden.

Wie formatieren ich die Daten nun im Workflow korrekt, so das diese als PHP-Array beim Empfang auf dem Server ausgelesen werden können wie bei einem regulären POST-Request?

Könnte mir jemand hier bitte ein funktionierendes Beispiel geben?
 

gre000

Sehr aktives Mitglied
28. Juli 2015
911
92
Hi,
ich habe gerade nur eine alte JTL Version zur Verfügung deshalb bin ich mir nicht sicher ob noch beide Request Arten in der Wawi drin sind.
1624229501757.png

Du solltest auf jeden fall den oberen nehmen!

Dann im Dropdown auf POST stellen URL angeben dann kannst du über das Feld Header den Content-Type festlegen ob Text, JSON oder XML ect.

Dann baust du im Body deine entsprechende Datenstruktur mit Hilfe von Variablen zusammen.

Beispiele sind schwierig. Wenn man nicht weiß welchen Content-Type du nutzen willst
 

Daniel Ali (SHOPSY)

Aktives Mitglied
29. November 2020
35
4
Hallo zusammen,

ich stehe aktuell vor dem gleichen Problem und hoffe auf nützliche Tipps. Ich möchte gerne eine Datei an eine API senden und im Header ein "X-AUTH-TOKEN" mitgeben.
Der equivalente cUrl Aufruf dazu: curl -H "X-AUTH-TOKEN: test_token" -F "file=@daten.csv" https://test-url-zur-api

Der Header scheint zu klappen mit:
Content-Type: multipart/form-data\r\n
X-AUTH-TOKEN: test_token

Aber wie muss die Datei mitgeschickt werden? Ist das überhaupt möglich? Langsam denke ich das es gar nicht möglich ist eine Datei mitzuschicken im Webrequest?!?

Gruß
Daniel
 
Zuletzt bearbeitet:

gre000

Sehr aktives Mitglied
28. Juli 2015
911
92
Puuh da fragst du was das müsste ich jetzt auch ausprobieren :)

Aber alternativ bau dir ein .bat Script mit curl drin und führe das über den WF aus
 

Daniel Ali (SHOPSY)

Aktives Mitglied
29. November 2020
35
4
Puuh da fragst du was das müsste ich jetzt auch ausprobieren :)

Aber alternativ bau dir ein .bat Script mit curl drin und führe das über den WF aus

Moin,
mit einer .bat Datei mache ich es bereits.
Ich hatte gehofft, dass man sich das aber sparen kann und würde lieber einen Webrequest ausführen. Aber dann bleibt mir erst einmal nichts anderes übrig. Evtl. wird das ja mit der 1.6er möglich. :)

Gruß
Daniel
 

MaxWe

Sehr aktives Mitglied
6. August 2018
311
42
Hamburg
Moin,
wir nutzen Web-Requests um Bestellungen in ein internes System zu übertragen, hierzu haben wir uns eine eigene Rest-API mit einfacher Auth via Token gebaut. Die Daten übertragen wir als JSON. Folgend sehen die Web-Request Workflows aus:

Wie schon angesprochen nicht "Web-Request (POST)" nutzen, sondern "Web-Request" und dann die Method auf "POST" stellen.
URL
Code:
https://xxx.de/api/punkt1

Header
Code:
Authorization: deinToken
Content-Type:application/json
Die Felder im Header einfach durch neue Zeilen trennen, ein Trennzeichen o.Ä. ist nicht nötig. Eine Authorization mit O-Auth2 o.Ä. ist meines Erachtens nicht möglich, da hierzu allein schon Werte in der Wawi gespeichert werden müssten. Also mit einfachen Token oder Bearer Token vorlieb nehmen.

Body, der eigentliche Knackpunkt
Code:
json={
"cExterneAuftragsnummer":"",
"support":"true",
"cBestellNr":"",
"bestellPositions":[],
"anzahl":"0",
"istBezahlt":"false"
}
Der Request enthält diverse Infos und hängt den eigenen Body dann noch unten dran. Zu Testzwecken kann man die Request auch einfach wieder als Text zurückschicken und im Workflow den Haken bei "Wert setzen" setzen und eine Variable zum speichern aussuchen. Ist zumindest eine Recht einfache Art zu sehen was da gesandt wird. Ein Log in der API ist ansonsten natürlich der bessere Weg.

So werte ich den Body aus
Code:
$cache = substr($request,strripos($request,'json=')+5,strlen($request)-strripos($request,'json='));
$cache = json_decode($cache,true);
$request enhält den Body der Request. Ich entferne den gesamten Body bis hinter das "=" meines "json=". Somit bleibt nur noch die eigentliche JSON und kann normal dekodiert werden.

Möglicherweise gibt es bessere Wege an die Daten im Request zu kommen, so funktionierts bei uns aber nun schon eine Weile.

Grüße

EDIT:
Hab grad eine Request mal hier
Code:
POST /api/orderLog HTTP/1.0
Accept:           application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
Accept-Encoding:  gzip, deflate
Authorization:    MEINTOKEN
Connection:       close
Content-Length:   176
Content-Type:     application/json
Host:             xx.xxx.de
User-Agent:       RestSharp/x.x.x.x
X-Accel-Internal: /internal-nginx-static-location
X-Real-Ip:        x.x.x.x

json={
"cBestellNr":"129814",
"cKundenNr":"151040",
"cInetBestellNr":"xxx-xxxxx-xxxx",
"dAuftragErstellt":"25.01.2021 00:38:33",
"amount":"1",
"isSupport":"false"
}
 
Zuletzt bearbeitet:

Daniel Ali (SHOPSY)

Aktives Mitglied
29. November 2020
35
4
Hallo MaxWe,

vielen Dank für die ausführliche Beschreibung, aber das hilft mir leider in meinem Fall nicht weiter, weil ich eine csv bzw. ein PDF per Webrequest an meine API senden möchte. :)

Gruß
Daniel
 

Eduard

Aktives Mitglied
25. Juni 2018
27
9
Moin,
wir nutzen Web-Requests um Bestellungen in ein internes System zu übertragen, hierzu haben wir uns eine eigene Rest-API mit einfacher Auth via Token gebaut. Die Daten übertragen wir als JSON. Folgend sehen die Web-Request Workflows aus:

Wie schon angesprochen nicht "Web-Request (POST)" nutzen, sondern "Web-Request" und dann die Method auf "POST" stellen.
URL
Code:
https://xxx.de/api/punkt1

Header
Code:
Authorization: deinToken
Content-Type:application/json
Die Felder im Header einfach durch neue Zeilen trennen, ein Trennzeichen o.Ä. ist nicht nötig. Eine Authorization mit O-Auth2 o.Ä. ist meines Erachtens nicht möglich, da hierzu allein schon Werte in der Wawi gespeichert werden müssten. Also mit einfachen Token oder Bearer Token vorlieb nehmen.

Body, der eigentliche Knackpunkt
Code:
json={
"cExterneAuftragsnummer":"",
"support":"true",
"cBestellNr":"",
"bestellPositions":[],
"anzahl":"0",
"istBezahlt":"false"
}
Der Request enthält diverse Infos und hängt den eigenen Body dann noch unten dran. Zu Testzwecken kann man die Request auch einfach wieder als Text zurückschicken und im Workflow den Haken bei "Wert setzen" setzen und eine Variable zum speichern aussuchen. Ist zumindest eine Recht einfache Art zu sehen was da gesandt wird. Ein Log in der API ist ansonsten natürlich der bessere Weg.

So werte ich den Body aus
Code:
$cache = substr($request,strripos($request,'json=')+5,strlen($request)-strripos($request,'json='));
$cache = json_decode($cache,true);
$request enhält den Body der Request. Ich entferne den gesamten Body bis hinter das "=" meines "json=". Somit bleibt nur noch die eigentliche JSON und kann normal dekodiert werden.

Möglicherweise gibt es bessere Wege an die Daten im Request zu kommen, so funktionierts bei uns aber nun schon eine Weile.

Grüße

EDIT:
Hab grad eine Request mal hier
Code:
POST /api/orderLog HTTP/1.0
Accept:           application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
Accept-Encoding:  gzip, deflate
Authorization:    MEINTOKEN
Connection:       close
Content-Length:   176
Content-Type:     application/json
Host:             xx.xxx.de
User-Agent:       RestSharp/x.x.x.x
X-Accel-Internal: /internal-nginx-static-location
X-Real-Ip:        x.x.x.x

json={
"cBestellNr":"129814",
"cKundenNr":"151040",
"cInetBestellNr":"xxx-xxxxx-xxxx",
"dAuftragErstellt":"25.01.2021 00:38:33",
"amount":"1",
"isSupport":"false"
}
vielen vielen Dank,
das hat mir super geholfen. Kleine Anmerkung, beim Body nicht json={} sondern nur einfach {}
 
  • Gefällt mir
Reaktionen: MaxWe

Ähnliche Themen