Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen? (https://www.delphipraxis.net/178489-api-anbindung-mit-xml-oder-soap-moeglich-welches-soll-ich-waehlen.html)

hedie 10. Jan 2014 16:34

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

mkinzler 10. Jan 2014 16:41

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

hedie 10. Jan 2014 17:02

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von mkinzler (Beitrag 1243065)
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

Ja das ist korrekt...

Was ist den deine Meinung zu meinen Fragen?

mjustin 10. Jan 2014 17:04

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von hedie (Beitrag 1243063)
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.

SOAP basiert auf XML. Beides hat Vor- und Nachteile in der Praxis. Mit XML kann man relativ bequem arbeiten, wenn es eine XSD-Datei gibt und diese sich mit dem Delphi Schema Binding Wizard in Delphi Code umwandeln läßt. Dann fehlt nur noch der HTTP Teil zur Datenübertragung, hierfür ist Internet Direct (Indy) geeignet.

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.

hedie 10. Jan 2014 17:13

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von mjustin (Beitrag 1243069)

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.

Vielen Dank für deine Antwort.


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!

Union 10. Jan 2014 18:13

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.

hedie 10. Jan 2014 18:15

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von Union (Beitrag 1243083)
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.

Hallo

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 :)

hedie 10. Jan 2014 18:54

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Weshalb hat der Union wohl seinen Text durchgestrichen?

vagtler 10. Jan 2014 19:01

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.

Union 10. Jan 2014 19:07

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:
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.
Und Benutzung dann so:
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);

hedie 10. Jan 2014 19:17

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:
Memo2.test := idHttp1.post('https://diensleister.ch....',memo1.lines
Ins memo1 kopiere ich 1:1 den XML Request aus der Testsuite.
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...

hedie 10. Jan 2014 19:56

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:
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;
(Quelle: http://www.delphigroups.info/2/1/207972.html)

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...

Mavarik 13. Jan 2014 10:37

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Funktioniert das besser als Stampit?

Mavarik

p80286 13. Jan 2014 10:53

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von Mavarik (Beitrag 1243398)
Funktioniert das besser als Stampit?

Für den Unbedarften liest sich das aber seltsam:
Zitat:

Stampit - Mehr Vorteile durch kostenfreie Alternativen
Die STAMPIT-Frankiersoftware wird aufgrund neuer, browser- und plattformunabhängiger
Alternativen der Deutschen Post - wie z.B. des kostenfreien Online-Services INTERNETMARKE - nicht mehr weiterentwickelt.


Union 13. Jan 2014 10:53

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Das ist der Nachfolger von StampIt.

bcvs 17. Feb 2021 10:34

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von Union (Beitrag 1243090)
Hier eine kleine Hilfe, muß ja nicht jeder das Rad neu erfinden:

Vielen Dank. Das hat mir auch nach 7 Jahren noch geholfen.
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?

Union 17. Feb 2021 10:57

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
Zitat:

Zitat von bcvs (Beitrag 1483171)
Bei den weiteren Anfragen muss ja eine pplId (Produktpreisliste) und der ProductCode übergeben werden. Wo bekomme ich diese ID und die Codes denn her?

Die PPL werden regelmäßig aktualisiert - du erhältst bei Änderungen automatisierte E-Mails hierzu.
Zitat:

Zitat von produktwebservice@deutschepost.de
Sehr geehrte Damen und Herren,

seit dem 04.12.2020 stehen neue oder geänderte Produkte zur Abholung für Sie bereit.
Der Gültigkeitsbeginn dieser Produkte ist/war am 01.01.2021.

Bitte übergeben Sie im Methodenaufruf zum Holen der Produkte den oben genannten Gültigkeitsbeginn als Parameter.

Diese E-Mail wurde automatisch generiert.
Bei Fragen und Wünschen wenden Sie sich bitte an die ProdWS-Administration!

Manchmal (sic!) wird die PPL auch als E-Mail Anhang im csv-Format gesendet.

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).

bcvs 17. Feb 2021 11:27

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:

Mit dem ProdWS bekommen Sie jedoch dreimal am Tag E-Mails über neue Produkte, wenn Sie diese Produkte nicht abrufen. Wird der ProdWS freigeschaltet, Sie diesen Service aber nicht nutzen, so bekommen Sie jeden Tag Erinnerungs-E-Mails.

Union 17. Feb 2021 12:20

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.

bcvs 17. Feb 2021 15:16

AW: API Anbindung mit XML oder SOAP möglich. Welches soll ich wählen?
 
OK, danke.
Muss ich mal schauen, wie ich das handle.

Union 17. Feb 2021 15:54

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?

bcvs 17. Feb 2021 16:06

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.

Union 17. Feb 2021 16:13

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