Hallo!
Ich möchte mit ms-Access Daten in ein gls Portal übertragen und habe von gls da einige Unterlagen erhalten für die API-Schnittstelle und einen Testaccount erhalten:
URL Testsystem: https://api-qs.gls-group.eu/
API-Endpoint: https://api-qs.gls-group.eu/public/v1/shipments
Test-Username: shipmentsapi_at
Test-Passwort: shipmentsapi_at
Test-Customer-ID:0404200001
Test-Contact-ID: 040aa2eXjW
Beispiel zur shipperId (= Customer- & Contact-ID getrennt mit einem Leerzeichen):
{
"shipperId" : "0404200001 040aa2eXjW",
Hier zwei pdf Dokumentationen der API Dokumentation: https://www.dropbox.com/sh/tppxjnjxj...ShZ7UpYka?dl=0
Ich möchte zuerst Daten von einem Kunden (Name mit Adresse) an die Schnittstelle schicke um dann ein fertiges Versandlabel als pdf zu erhalten.
Daher wollte ich fragen, ob mir jemand behilflich sein kann wie ich dies mit MS-Access umsetzen könnte und wie ich da beginnen muss.
Vielen Dank für jede Hilfe und Antwort
Zitat von: baumax am Februar 22, 2022, 14:08:08Daher wollte ich fragen, ob mir jemand behilflich sein kann wie ich dies mit MS-Access umsetzen könnte und wie ich da beginnen muss.
Im MOF wurde dir auf dieselbe Frage der Tipp gegeben mal im Forum nach "JSON" zu suchen. - Wenn du das tun würdest, würdest du sicherlich einige Beispiele finden.
Die Kurz-Zusammenfassung:
- Du baust einen JSON String mit den erforderlichen Daten zusammen.
- Sendest diesen String dann über ein HTTPRequest- oder ServerXMLHTTP-Objekt unter Angabe deiner Zugangsdaten an den Endpoint der Schnittstelle.
- Das Versandlabel-PDF erhältst du dann als Antwort von der Web-API und speicherst es lokal.
Wenn du konkretere Hilfe benötigst, dann stell bitte konkreten Fragen.
Danke für die Antwort.
Ich habe den http Request durchgeführt und habe auch eine Antwort erhalten.
Die Infos im MOF.
Mein Problem ist noch, wie ich Antwort korrekt als pdf Datei speichern kann.
Danke für eine Unterstützung.
Zitat von: baumax am Februar 25, 2022, 19:20:40Ich habe den http Request durchgeführt und habe auch eine Antwort erhalten.
Mein Problem ist noch, wie ich Antwort korrekt als pdf Datei speichern kann.
Vermutlich hast du im JSON einen
Base64 codierten String zurückbekommen.
Diesen müsstest du dekodieren (https://www.google.com/search?q=base64+decode+VBA) und dann binär in einer Datei speichern, die dann dein PDF ist.
Danke für die Antwort.
Ich habe da folgende Base64 Dekodierung verwendet:
'**********************
'Copyright(C) 2022 Xarial Pty Limited
'Reference: https://www.codestack.net/visual-basic/algorithms/data/encoding/base64/
'License: https://www.codestack.net/license/
'**********************
Private Function Base64ToArray(base64 As String) As Variant
Dim xmlDoc As Object
Dim xmlNode As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xmlNode = xmlDoc.createElement("b64")
xmlNode.DataType = "bin.base64"
xmlNode.Text = base64
Base64ToArray = xmlNode.nodeTypedValue
End Function
Ich erhalte dann aber folgende Meldung in der Zeile:
xmlNode.text = base64
Laufzeitfehler '-2147467259 (80004005)':
Fehler beim Analysieren von
'{labels":["JVBERi0xLjQKJeLjz9MKMSAwIG9iaiA8PC9Db2xvclNwYWNlL0RldmljZUdyYXkvU3
als bin,.base64-Datentyp.
Wie kann ich dann den fertigen Text in ein pdf speichern.
Würde evtl. dann folgendes funktionieren:
Open CurrentProject.path & "\test.pdf" _
For Output As #1
Print #1, inhalt
Close #1
Danke für eine weitere Hilfe
Zitat von: baumax am Februar 25, 2022, 20:01:10Laufzeitfehler '-2147467259 (80004005)':
Fehler beim Analysieren von
'{labels":["JVBERi0xLjQKJeLjz9MKMSAwIG9iaiA8PC9Db2xvclNwYWNlL0RldmljZUdyYXkvU3
als bin,.base64-Datentyp.
Der Anfang des gezeigten Wertes (
{labels":[") ist JSON und nicht Teil des Base64-kodiereten Textes.
Zitat von: baumax am Februar 25, 2022, 20:01:10Wie kann ich dann den fertigen Text in ein pdf speichern.
Würde evtl. dann folgendes funktionieren:
Open CurrentProject.path & "\test.pdf" _
For Output As #1
Print #1, inhalt
Close #1
Das geht in die richtige Richtung, aber ich denke du brauchst:
Open ... For Binary ... Put ...
Danke für den Hinweis.
Hier nun mein komplettes Beispiel:
Public Sub gls()
Dim user As String
Dim pwd As String
Dim path As String
Dim i As Integer
i = 0
beenden = False
user = "shipmentsapi_at"
pwd = "shipmentsapi_at"
path = "https://api-qs.gls-group.eu/public/v1/shipments"
httpPOST path, user, pwd
End Sub
Public Function httpPOST(fn As String, _
Optional authUser As String = vbNullString, _
Optional authPass As String = vbNullString) As String
pHtml = fn
Dim body As String
body = "{" & _
"""shipperId"" : ""0404200001 040aa2eXjW""," & _
"""addresses"" :" & _
"{" & _
"""delivery"" :" & _
"{" & _
"""name1"" : ""Test Name 1""," & _
"""street1"" : ""Test Street 1""," & _
"""country"" : ""DE""," & _
"""zipCode"" : ""10100""," & _
"""city"" : ""Berlin""" & _
"}" & _
"}," & _
"""parcels"" :" & _
"[" & _
"{" & _
"""weight"" : 2.5" & _
"}" & _
"]" & _
"}"
Dim oHttp As Object
Set oHttp = CreateObject("Microsoft.XMLHTTP")
Call oHttp.Open("get", pHtml, False)
If (authUser <> vbNullString) Then
' need to do basic authentication
' acknowledgement to http://pastie.org/1192157
oHttp.setRequestHeader "Accept-Encoding", "gzip,deflate"
oHttp.setRequestHeader "Accept-Language", "de"
oHttp.setRequestHeader "Content-Type", "application/json"
oHttp.setRequestHeader "Accept", "application/json"
oHttp.setRequestHeader "Authorization", "Basic " + _
EncodeBase64(authUser + ":" + authPass)
End If
Call oHttp.Send(body)
Open CurrentProject.path & "\test.pdf" For Binary Access Write As #1
Put #1, , Base64ToArray(jsonparser(oHttp.responseText))
Close #1
Close #1
End Function
Function EncodeBase64(text As String) As String
Dim arrData() As Byte
arrData = StrConv(text, vbFromUnicode)
Dim objXML As MSXML2.DOMDocument60
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
'EncodeBase64 = Application.Clean(objNode.text)
EncodeBase64 = objNode.text
Set objNode = Nothing
Set objXML = Nothing
End Function
'**********************
'Copyright(C) 2022 Xarial Pty Limited
'Reference: https://www.codestack.net/visual-basic/algorithms/data/encoding/base64/
'License: https://www.codestack.net/license/
'**********************
Private Function Base64ToArray(base64 As String) As Variant
Dim xmlDoc As Object
Dim xmlNode As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xmlNode = xmlDoc.createElement("b64")
xmlNode.DataType = "bin.base64"
xmlNode.text = base64
Base64ToArray = xmlNode.nodeTypedValue
End Function
Private Function jsonparser(wert As String) As String
Dim Json As Object
Set Json = ParseJson(wert)
'Debug.Print Json("labels")(1)
jsonparser = Json("labels")(1)
End Function
Für das Parsen von json verwende ich die Info und Installation von https://github.com/VBA-tools/VBA-JSON
Das ganze wird in die Datei test.pdf gespeichert und kann problemlos geöffnet werden.
Vielen Dank für die Unterstützungen