API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Hallo zusammen...
Lange ist es her seit meinem letzten Beitrag! Aber nun bin ich wieder aktiver mit Delphi! Euch allen mal ein frohes neues Jahr. Ich stehe aktuelle vor der folgenden Aufgabe: Ich möchte eine Dienstleistung unserer Post in meiner Applikation nutzen. Dazu gibt es ein API. Die Anbindung erfolgt wahlweise über XML oder SOAP. Da ich bisher noch keine erfahrungen mit beiden habe, wollte ich euch mal fragen, welche schnittstelle den wohl einfache mit Dehlphi zu implementiere bzw. einzusetzen ist. Mein bauchgefühl sagt mir XML. Da ich XML im ansatz kenne. Soap dagegen sagt mir nix. Da die entsprechenden Dokumente zur integration als "geheim" eingestufft sind von unserer Post, darf ich die leider hier nicht einfach so hochladen... Sonst hätte ich das natürlich getan. Es steht, dass es für die übermittlung der XML-Anfrage zwei Möglichkeiten gibt: HTTP Post im Feld XYZ ODER HTTP RAW Post. Ich hoffe ihr könnt mir ein paar tipps geben, da ich davon ausgehe dass solche interfaces industrie standard sind und ihr deshalb, auch ohne die hier vorliegende dokumentation zu kennen, mir einige tipps und hinweise geben könnt. Ich bin über jeden hinweis froh :) Danke schonmal Liebe Grüsse |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Es wird sich um einen Webservice handeln
http://www.post.ch/post-startseite-n...ce-barcode.htm Interessanterweise hant die Deutsche Post dieselben Seiten und Dienste |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Was ist den deine Meinung zu meinen Fragen? |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Bei SOAP kann es je nach verlangten Standards (z.B. WS-*) mit Delphi schwieriger werden. Es gibt zwar die Möglichkeit, einen Webservice Client anhand eines WSDL Dokuments zu erstellen, aber in manchen Fällen sind noch Nacharbeiten notwendig. Der Einsatz von Testwerkzeugen wie SoapUI kann da weiterhelfen, um Soll- und Istvergleiche der HTTP Request/Response Daten zu machen. Ferner gibt es ein Delphi-kompatibles Web Service Toolkit für Free Pascal, das aktiv entwickelt wird und teilweise in Delphi fehlende Features enthält. Falls es mit SOAP (und dem Web Service Client Wizard) in Delphi im ersten Anlauf Probleme gibt, die sich in Foren etc. nicht kurzfristig lösen lassen, würde ich wohl eher den Weg über die XML basierte Schnittstelle verfolgen. |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Ich habe bisher weder eine XSD noch eine WSDL Datei erhalten. Ich vermute mal, dass es keine solchen gibt. Es gibt lediglich ein ellen langes Dokument, welches einen XML header und dessen parameter aufzeigt, welche gesendet werden sollen/können. Bei der SOAP Dokumentation kann ich mir nicht viel darunter vorstellen.... So wie ich dich nun verstanden habe, würdest du die SOAP Variante zuerst versuchen? Gibt es vielleicht irgendwelche Demo projekte in delphi für XML oder SOAP? Danke! |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Wenn Du noch nicht mit WebServices und SOAP gearbeitet hast und es sich um die One Click Schnittstelle (Internetbriefmarke) handelt, dann vergiß es lieber. Du musst u.a. SOAP-Header patchen für die Authentifizierung, lustige Hashes berechnen usw.
|
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Ja es handelt sich um die Briefmarken lösung. Ich habe inzwischen die xsd files gefunden... Es gibt sie also doch :) Weshalb sollte ich dies vergessen? Was soll daran so extrem schwierig sein? Im endeffekt sende ich ein xml "dokument" welches meine anfrage definiert und meine zugangsdaten enthält. Und als Antwort erhalte ich meine angeforderten daten zurück :) |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Weshalb hat der Union wohl seinen Text durchgestrichen?
|
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Drei Minuten nachdem Du Deine Antwort geschrieben hast...
Probier es doch aus. |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Weil ich Ihn laut seiner Signatur mal gewähren lassen will. Bin aber weiterhin der Meinung, dass gerade dieses Projekt nicht unbedingt zum Einstige geeignet ist. Hier eine kleine Hilfe, muß ja nicht jeder das Rad neu erfinden:
Delphi-Quellcode:
Und Benutzung dann so:
unit OneClickSoapHelpers;
interface uses Classes, InvokeRegistry, OneClickForApp, IdHashMessageDigest, idHash, XMLIntf; type TOneClickHeader = class(TSoapHeader) private FPartner_ID : string; FRequest_TimeStamp : string; FKey_Phase : integer; FPartner_Signature : string; FPartner_Key : string; procedure CalcSignature; public function ObjectToSOAP(RootNode: IXMLNode; ParentNode: IXMLNode; const ObjConverter: IObjConverter; const NodeName: string; const NodeNamespace: string; const ChildNamespace: string; ObjConvOpts: TObjectConvertOptions; out RefID: string): IXMLNode; override; property Partner_Key : string read FPartner_Key write FPartner_Key; published property Partner_Id : string Index (1) read FPartner_Id write FPartner_Id; property Request_TimeStamp : string Index (1) read FRequest_TimeStamp write FRequest_TimeStamp; property Key_Phase : integer Index (1) read FKey_Phase write FKey_Phase; property Partner_Signature : string Index (1)read FPartner_Signature write FPartner_Signature; end; onec = class(TOneClickHeader); implementation uses sysutils, strutils, Rio; { TOneClickHeader } procedure TOneClickHeader.CalcSignature; var idmd5 : TIdHashMessageDigest5; ACode : string; begin ACode := trim(Partner_id)+'::'+ trim(Request_TimeStamp)+'::'+ IntToStr(Key_Phase)+'::'+ FPartner_Key; idmd5 := TIdHashMessageDigest5.Create; try FPartner_Signature := LowerCase(LeftStr(idmd5.HashStringAsHex(ACode),8)); finally idmd5.Free; end; end; function TOneClickHeader.ObjectToSOAP(RootNode, ParentNode: IXMLNode; const ObjConverter: IObjConverter; const NodeName, NodeNamespace, ChildNamespace: string; ObjConvOpts: TObjectConvertOptions; out RefID: string): IXMLNode; begin Result := ParentNode.AddChild('PARTNER_ID'); Result.Text := FPartner_Id; Result := ParentNode.AddChild('REQUEST_TIMESTAMP'); Result.Text := FRequest_TimeStamp; Result := ParentNode.AddChild('KEY_PHASE'); Result.Text := IntToStr(FKey_Phase); Result := ParentNode.AddChild('PARTNER_SIGNATURE'); CalcSignature; Result.Text := FPartner_Signature; end; initialization InvRegistry.RegisterHeaderClass(TypeInfo(OneClickForAppPortType), onec, 'onec', ''); end.
Delphi-Quellcode:
var
ocApp : OneClickForAppPortType; AuthReq : AuthenticateUserRequest; AuthRes : AuthenticateUserResponse; ocHeader : Onec; begin ocApp := GetOneClickForAppPortType; // Header Informationen senden ocHeader := Onec.Create; ocHeader.Partner_Id := '<Von DPAG zugeteilte Partner ID>'; ocHeader.Key_Phase := 1; ocHeader.Partner_Key := '<Von DPAG zugeteilter Schlüssel>'; ocHeader.Request_TimeStamp := FormatDateTime('ddmmyyyy-hhmmss', Now); (ocApp as ISOAPHeaders).Send(ocHeader); |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Lieber Union
Vielen Dank! Ich bin gerade dabei den puren XML Request zu testen... Es gibt dazu eine online test-suite. Diese generiert auch die "XML-Datei" für den Request und sendet diesen ab. Ich habe mir zwei memos auf meine form gezogen. Einen idHTTP und einen SSLIOSockshandler... Für die HTTPS Seite Nun sende ich wie folgt:
Delphi-Quellcode:
Ins memo1 kopiere ich 1:1 den XML Request aus der Testsuite.
Memo2.test := idHttp1.post('https://diensleister.ch....',memo1.lines
Als Antwort erhalte ich jedoch einen Error. "Die XML-Anfrage ist fehlerhaft." Ich werde nun noch deinen SOAP Code testen. Vielen Dank dafür! Dies wird vermutlich jedoch ein etwas grösserer blindflug. Vielleicht sollte ich hier noch anmerken, dass ich nicht das gesamte Sortiment bzw. Angebot des Dienstleisters nutzen möchte, sondern nur zwei drei wenige. Zudem ist es nur für mich privat im einsatz... |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Gut, hat nun geklappt!
Habe die simple xml variante gewählt. Für all jene, die es interessiert hier der code der zum Ziel führte:
Delphi-Quellcode:
(Quelle: http://www.delphigroups.info/2/1/207972.html)
procedure TForm1.SendPostData;
Var oXMLHTTP: IXMLHTTPRequest; lParams: TStringList; FResponseText: String; FResponseHdrs: String; begin lParams := TStringList.Create; lParams.LoadFromFile('test.xml'); oXMLHTTP := CreateOleObject('MSXML2.XMLHTTP.3.0') as IXMLHTTPRequest; oXMLHTTP.open('POST', 'https://secure.dev.gateway.gov.uk/submission', False, EmptyParam, EmptyParam); oXMLHTTP.send(lParams.Text); // The ResponseText is what is returned by the server FResponseText := Trim(oXMLHTTP.ResponseText); FResponseHdrs := oXMLHTTP.getAllResponseHeaders; showmessage(FResponseText); end; Dieser Code verwendet die Datei MSXML2_TLB Diese geistert im Netz herum. (http://code.google.com/p/omnixml/sou...MSXML2_TLB.pas) Dazu muss man noch ActiveX und comobj in die uses aufnehmen. Nun erhalte ich eine korrekte antwort zurück. Der nächste Schritt wird sein, diese zu interpretieren... Vielleicht hat ja noch jemand eine vermutung, weshalb idhttp.post() nicht funktioniert hat... |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
|
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Zitat:
|
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Das ist der Nachfolger von StampIt.
|
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Ich muss jetzt auch diese SOAP-Anbindung für die Internetbriefmarke (OneClick4App) implementieren. Eine Frage dazu: Bei den weiteren Anfragen muss ja eine pplId (Produktpreisliste) und der ProductCode übergeben werden. Wo bekomme ich diese ID und die Codes denn her? |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Zitat:
Zitat:
Der Abruf erfolgt über den (wsse-gesicherten) ProdWS-Webservice (ProductInformation.wsdl) über das in der E-Mail angegeben Gültigkeitsdatum. Es empfiehlt sich IMHO, die Produktdaten zwischenzuspeichern, da sich ein ständiger Abruf wegen der Größe verbietet (> 20k Zeilen XML pro Abruf). |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
OK, also brauche ich doch diesen ProdWS-Service?
Ich hatte den auf dem Anmeldeformular nicht freischalten lassen, weil mich diese Aussagen abgeschreckt haben: Zitat:
|
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Ich erhalte nur E-Mails, wenn es neue Produkte gibt (jeden Abend zwischen 19-20h). Dies aber so lange, bis ich die Produktliste für den angegebenen Gültigkeitsbeginn abrufe (ProductListRequest.timestamp.date). Sinnvollerweise schaffst Du einen eigenen Service, der die noch offenen abzufragenden Daten an den Client zurückmeldet. Der Client sollte dann die Produktliste(n) abrufen, speichern und sich den abgerufenen Gültigkeitsbeginn merken, damit dieser nicht noch einmal verwendet wird.
Alternativ holst Du die Produktlisten zentral und musst für die Verteilung der Daten an die Clients komplett selber sorgen. |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
OK, danke.
Muss ich mal schauen, wie ich das handle. |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Erst einmal bräuchtest Du ProdWS-Zugriff. Ansonsten müsstest Du dich auf die in unregelmäßigen Abständen per Mail eintreffenden cxv-Produkttabellen verlassen. Die wollen aber auch den Clients bekannt gemacht werden.
Ist das eine In-House-Lösung oder wird das draussen bei (mehreren) Kunden eingesetzt? |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Ist eine In-House-Lösung, also für einen einzigen Kunden.
Ich brauche derzeit auch nur zwei Produkte: Warensendung 500 und Warensendung 1000 und noch deren internationale Pendants. Die aktuellen ProductCodes habe ich. |
AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
Dann sollte Dir die csv reichen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz