Problem mit DPD-API (Soap/XML): Auth Fehler, bitte helfen!

Ich versuche seit einiger Zeit für den Abruf eines Versandetiketts mit dem DPD-Cloudservice zu kommunizieren, was nur zum Teil funktioniert. Im Prinzip läuft das folgendermaßen ab:

  1. man holt sich mit Username und Passwort von DPD ein “AuthToken”
  2. man verwendet das Token, um eine Order abzusetzen
  3. man erhält von DPD einen langen Base64-String, mit dem PDF für ein Versandetikett.

Mein Problem ist nun, dass Schritt 2 permanent mit “auth fail” beantwortet wird, anstatt das Etikett herauszurücken. Der Support von DPD hat sich die von mir produzierten XML angesehen und behauptet, diese wären ok und würden “durchlaufen” - was sie aber in meiner Xojo-App nicht tun.

Ich vermute nun (wenn also das XML ok ist), dass es irgendwas mit der Art zu tun hat, mit der ich versende, aber: Wieso funktioniert dann der Auth-Prozess, aber nicht das Ordern. Einziger Unterschied ist die Länge …

Ich packe hier mal ein Testprojekt rein, die Test-Zugangsdaten sind nicht persönlich, bei jedem User die gleichen. Ich weiss das Problem ist umfangreich und quasi eine Zumutung fürs Forum. Vielleich hat doch jemand Lust und findet aber jemand die Ursache ganz schnell. Danke!

Download: www.qualidat.com/material/xojodpd.zip

Im Projekt ist in der Funktion dpd_order() der Großteil des XML-Codes auskommentiert, nur die Authentifikation aktiv, kann man aber ändern. Der Fehler ist im Bereich “order response” im Info-Fenster zu sehen, kurz vor Ende. Danke.

Was macht das denn hier?

For i=1 To 128
  If Not con Then
    hsock = New HTTPSecureSocket
    hsock.Secure=True
    hsock.ConnectionType = SSLSocket.TLSv12
    hsock.SetRequestContent(data,"soap/xml")
    rbuf=hsock.Post(url,10)
    con=(rbuf<>"")
    wait 100
  End If
  
Next

Soweit ich sehen kann, versucht da die Socke(t) 128 mal zu verbinden. Das mußt Du nur einmal machen.

Haben DPD eine Spielwiese zum testen?

Hi Frank,

bei der URL von server order fehlt /storeOrders am Ende. Richtige URL lautet somit https://public-ws-stage.dpd.com/services/ShipmentService/V4_4/storeOrders

DPD hat anscheinend auch das XML nicht richtig angeschaut. Da sind ein paar Fehler drin. Am besten mit dem Sample vergleichen.

z.B. xml=xml+" <messageLanguage>"+lang.Trim+"<messageLanguage>"

hier fehlt das /

xml=xml+"</soapenv:Header/><soapenv:Body/>"

hier ist der / nach Header und Body zu viel.

Und weight ist doppelt vorhanden.

@Beatrix:

  • con wird doch true gesetzt, sobald etwas empfangen wurde, danach wird nicht erneut connected.
  • die DPD-“Spiewiese” ist im Beispiel eingetragen, für echte Orders muss man andere Server ansprechen und echte Nutzerdaten eingeben

@Wolfgang: Ja, du hast recht, in dem Schließ-Tag habe ich den Slash vergessen. Aber auch nach Korrektur ändert sich nichts, der Auth-Fehler bleibt.

Der Auth-Fehler ist weg sobald du die URL angepasst hast.

Ich erhalte leider nun einen anderen Fehler: Error reading XMLStreamReader.

Danke, habs … gefunden und erledigt :slight_smile:

Hallo Frank,
ich versuche mich auch gerade an der DPD-API. Hast du mittlerweile eine Lösung? Der Link deines Beispielcodes funktioniert leider (nicht) mehr…
Ich wäre sehr daran interessiert mehr Infos zu bekommen.
Vielen Dank!

Hat ansonsten vielleicht jemand auch schon mal probiert die DPD API (SOAP/XML) anzubinden?

Hallo. Ich habe das Testprojekt wieder online gestellt, unter:

qualidat.com/material/dpdcon.zip

1 Like

Hallo Frank,
das ist sehr nett vielen Dank. Der Code wird mir bestimmt helfen.

Das Beispiel hat perfekt funktioniert! Vielen Dank nochmal, das erspart mir eine Menge “Knobel-Arbeit”