Jak połączyć się z webserwisem FedEx

0

Witajcie,

Próbuję napisać aplikację, która połączy się z Web Servis'em FedEx (taka firma kurierska dla tych, którzy nie kojarzą). Od samego początku był z tym problem gdyż delphi 7, z którego korzystam miało problem nawet z pobraniem WSDL (nie tworzyły się typy) finalnie użyłem delphi 2009 i cała klasa się w delphi wygenerowała. Powiedzmy, że ten etap mam zrobiony. Teraz uzupełniam dane np tak:

procedure TForm1.Button1Click(Sender: TObject);
var
  ws : IklService;
  l: list;
  p: paczka;
  pArray: paczki;
begin
  p := paczka.Create;
  p.typ := 'PC';
  p.waga := '20';
  p.gab1 := '1';
  p.gab2 := '2';
  p.gab3 := '3';
  p.nrExtPp := '9400000042450';
  p.ksztalt :='0';
  setLength(pArray,1);
  pArray[0] := p;

  l := list.Create;
  l.nrPrzesylki := '';
  l.nrExt := '';
  l.formaPlatnosci := 'P';
  l.rodzajPrzesylki := 'K';
  l.placi := '1';
  l.nadawca := kontrahentNadawca.Create;
  l.nadawca.numer := '500565871';
  l.nadawca.imie := '';
  l.nadawca.nazwisko := '';
  l.nadawca.nazwa := '';
  l.nadawca.telKontakt := '';
  l.nadawca.emailKontakt := '';
  l.odbiorca := kontrahentOdbiorca.Create;
  l.odbiorca.nrExt := '16';
  l.odbiorca.nazwa := 'WWO';
  l.odbiorca.czyFirma := 'T';
  l.odbiorca.miasto := 'KATOWICE';
  l.odbiorca.kod := '40-018';
  l.odbiorca.ulica := 'Graniczna';
  l.odbiorca.nrDom := '33';
  l.odbiorca.nrLokal := '25';
  l.uslugi := uslugi.Create;
  l.uslugi.ubezpieczenie := ubezpieczenie.Create;
  l.uslugi.ubezpieczenie.kwotaUbezpieczenia := '5000';
  l.uslugi.zwrotDokumentow := '0';
  l.uslugi.zwrotKopiListu := '0';
  l.uslugi.doreczeniaAdresPrywatny := '0';
  l.uslugi.doreczeniaSiecHandlowa  := '0';
  l.uslugi.potwDostEmail := '0';
  l.uslugi.potwNadEmail := '0';
  l.uslugi.ud01 := '0';
  l.uslugi.ud03 := '0';
  l.uslugi.ud04 := '0';
  l.paczki := pArray;
  ws := GetIklService(false,'',HTTPRIO1);
  l := ws.zapiszList('xxxx',l);
end;

xxx to unikalny klucz klienta (mam klucz testowy jeśli ktoś jest zainteresowany pomocą podam go na priv).

No i tutaj po tym etapie mam dwa problemy.
Pierwszy to plik, który generuje mi delphi (XML) różni się nieco od tego, który otrzymałem od FedEx (załączniki fedex_request_new.txt jest prawidłowy ten drugi generuje mi delphi i jest błędne).

Druga sprawa to cały czas dostaję komunikat o błędnym kluczu mimo iż klucz jest poprawny (ten xxx) - jest to potwierdzone przez FedEx.
Problemem prawdopodobnie jest to, że fedex używa innej wersji protokołu SOAP niż delphi 7 jest w stanie obsłużyć. Czy jesteście w stanie powiedzieć mi jak plik poprawny (wygenerowany przez FedEx) mogę wypchnąć do nich przy użyciu zwykłego HTTP.POST?

Finalnie plik w postaci XML będę generował innym mechanizmem i przygotowywanie całej klasy w delphi nie jest mi potrzebne. Potrzebuję jedynie mechanizm, który wypluje to bezpośrednio do FedEx.

Będę wdzięczny za każdą pomoc

1

Problem rozwiązany udało się w ten sposób:

uses ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
  mhttp: OleVariant;
  URL: String;
  lParams: TStringList;
begin
  lParams := TStringList.Create;
  lParams.LoadFromFile('C:\fedexrequest.xml');
  URL := 'https://poland.fedex.com:443/fdsWs/IklServicePort';
  mhttp := CreateOleObject('MSXML2.XMLHTTP');
  mhttp.Open('POST', URL, False);  // False=synchronously
  //mhttp.setRequestHeader('User-Agent', APP_WS_USER_AGENT); // opcjonalnie
  mhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
  mhttp.send(lParams.Text);
  if mhttp.Status = 202 then
    ShowMessage('ACCEPTED OK!')
  else
    Showmessage(mhttp.StatusText+ mhttp.responseText);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1