Macie może jakieś doświadczenia w integracji własnego kodu z systemem e-nadawca Poczty Polskiej? Bo właśnie czytam dokumentację i wrażenia mam raczej negatywne. Może są jakieś lżejsze metody ugryzienia tego tematu?

- Rejestracja:ponad 12 lat
- Ostatnio:7 miesięcy
- Postów:6610
lżejsze metody niż co? konkretnie z czym masz problem?

- Rejestracja:prawie 14 lat
- Ostatnio:około 9 godzin
- Postów:138
Tak ściślej to szukam jakiejś implementacji uproszczonej, coś jak jest np przy płatnościach on-line: można zrobić implementację pełną (dużo czasu), a można uproszczoną(mało czasu, mniejszy stopień skomplikowania). W metodach podanych przez pocztę napisali, że trzeba najpierw utworzyć konto w serwisie, natomiast na jakiejś podstronie, że można zlecać wysłanie paczki bez rejestracji. I tego mniej więcej szukam: prostej metody która po przekazaniu danych zarejestruje paczkę i wypluje użytkownikowi wypełniony blankiet nadania. Nie wiem czy takie coś istnieje i czy tak się da, ale kto pyta nie błądzi:)

- Rejestracja:prawie 14 lat
- Ostatnio:około 9 godzin
- Postów:138
Muszę odświeżyć temat. Doszedłem do etapu poprawnego logowania i tworzenia przesyłki [ trochę nomenklatury: paczka-paczka pocztowa sensu stricte, przesyłka -lista paczek przekazywana do systemu e-nadawca ], ale nie mogę przeskoczyć dodawania paczek do przesyłki. Stosując metodę addshipment dostaję błąd: nie znaleziono żądanego nagłówka.
Trochę kodu dla rozjaśnienia:
procedure TForm6.Button2Click(Sender: TObject);
var
E: elektronicznynadawca;
P:paczkaPocztowaType;
A:adrestype;
tmp:addshipment;
inp: hello;
karta:getkarty;
kartaakt:setAktywnaKarta;
bufor1:bufortype;
nrguid:getguid;
begin
inp := hello.Create;
try
E:=(httprio1 as elektronicznynadawca);
inp.in_:='test';
karta:=getkarty.Create;
kartaakt:=setAktywnaKarta.Create;
button1.Caption:=inttostr( kartaakt.idKarta); //ok daje zero
bufor1:=bufortype.Create;
bufor1.active:=true;
tmp:=addshipment.Create;
A:=adrestype.Create;
A.nazwa:='Jan';
A.nazwa2:='Nowak';
A.ulica:='Cicha';
A.numerDomu:='1';
a.numerLokalu:='1';
a.miejscowosc:='Warszawa';
a.kodPocztowy:='00002';
P:=paczkapocztowatype.Create;
P.posteRestante:=true;// Boolean;
P.kategoria:= kategoriaType(0);
P.adres:=A;
//tmp.przesylki[0]:=p;
E.addShipment(tmp);
ShowMessage('OK: ' + inp.ToString + #13#10)
except on E:exception do ShowMessage( e.Message+' not OK');
end;
inp.Free;
end;



- Rejestracja:prawie 14 lat
- Ostatnio:około 9 godzin
- Postów:138
No niestety nie, więc chwilowo zarzuciłem pomysł. Ale jak jest nas dwóch to może uda się popchnąć temat do przodu. Pytałem u źródła w Poczcie Polskiej, ale mam wrażenie że sami mają blade pojęcie jak to jest zrobione. Podejrzewam, że moment w którym się zatrzymaliśmy
tm.przesylka[0] := paczkapocztowa
to jest jakaś zupełna pierdoła, ale na dziś zupełnie nie wiem jak to rozwiązać
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 8 lat
- Postów:11
to nie do końca pierdoła - w/g mojej oceny - autorzy sugerując się środowiskiem VS uznali, że Delphi-arze to dinozaury i zamiast stworzyć alternatywę uznali, że wszyscy pracują na C# a tam są przekazywane zawsze wskaźniki. Dlatego oni sami nie znają rozwiązania problemu w Delphi.
Gdyby nie konieczność rozwiązania problemu w Delphi dopisałbym bibliotekę w C# i zamknąłbym temat, a tak szukam rozwiązania.
Moim zdaniem - Poczta Polska ma prosty temat do zrobienia - stworzyć metodę przekazującą po wskaźniku (TPointer) lub (TObject), Tyle, że pewnie im się zwyczajnie nie chce ruszyć tematu.
Pozdrawiam

- Rejestracja:prawie 14 lat
- Ostatnio:około 9 godzin
- Postów:138
Jeśli problem leży po stronie Poczty to nie wiem czy nie lepiej dopisać bibliotekę w innym języku. Podejrzewam, że dużo więcej czasu zajmie poszukiwanie rozwiązania dla Delphi (a i tak nie wiadomo czy nie skończy się na półśrodkach)
Wybitny Krawiec napisał(a):
Poszukaj mojego wątku na ten temat
Jak byś się podpisał było by łatwiej :)
- Rejestracja:ponad 9 lat
- Ostatnio:około 8 lat
- Postów:19
Szukaj norbert_kacz :)
Próbuje na platformie testowej e-nadawcy
Ustawienia HTTPRIO
WSDLLOCATION https://en-testwebapi.poczta-polska.pl/websrv/en.wsdl
Service ElektronicznyNadawca
Port ENSoap
podpięty do tego jest THTTPReqResp
z wypełnionymi username user i password pass i..lipa:/
PS. Delphi XE5
Metoda używana w webservice sledzenia czyli
var
Hdr: Security;
Headers: ISOAPHeaders;
begin
Hdr := Security.Create;
]
Hdr.MustUnderstand := False;
Hdr.UsernameToken := UsernameToken.Create;
Hdr.UsernameToken.Username := 'sledzeniepp';
Hdr.UsernameToken.Password := Password.Create;
Hdr.UsernameToken.Password.Type_ :=
'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
Hdr.UsernameToken.Password.Text := 'PPSA';
]
htpr1.SOAPHeaders.SetOwnsSentHeaders(True);
Headers := GetSledzenie(TRUE,'', htpr1) as ISOAPHeaders;
Headers.Send(hdr);
po zmianie user/pass nie chce działać - ten sam błąd 401
Z kolei
procedure TForm1.htpr2BeforeExecute(const MethodName: string;
SOAPRequest: TStream);
var
xml: IXMLDocument;
n1, n2: IXMLNode;
begin
SOAPRequest.Position := 0;
xml := TXMLDocument.Create(Application);
xml.LoadFromStream(SOAPRequest);
n1 := xml.ChildNodes.FindNode('SOAP-ENV:Envelope');
if n1 <> nil then
begin
n1 := n1.AddChild('SOAP-ENV:Header', 0);
n1 := n1.AddChild('wsse:Security');
n1.Attributes['SOAP-ENV:mustUnderstand'] := '1';
n1.Attributes['xmlns:wsse'] := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
n1 := n1.AddChild('wsse:UsernameToken');
n1.Attributes['xmlns:wsu'] := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
n2 := n1.AddChild('wsse:Username');
n2.Text := 'user';
n2 := n1.AddChild('wsse:Password');
n2.Attributes['Type'] := 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
n2.Text := 'pass';
end;
SOAPRequest.Position := 0;
xml.SaveToStream(SOAPRequest);
end;
daje błąd Header not understod

<code=delphi></code>
- łatwiej będzie go analizować, jeśli będzie kolorowy ;)
- Rejestracja:ponad 9 lat
- Ostatnio:około 8 lat
- Postów:19
a to widziales?
https://e-nadawca.poczta-polska.pl/download/en_opis_webapi.pdf
https://e-nadawca.poczta-polska.pl/websrv/en.wsdl
I jeszcze jedno - dane w sledzeniu sa tylko przez 30 dni.


- Rejestracja:ponad 12 lat
- Ostatnio:7 miesięcy
- Postów:6610
no rzeczywiście ciężko poszukać... https://www.google.pl/search?q=delphi+generate+guid
- Rejestracja:prawie 9 lat
- Ostatnio:ponad 4 lata
- Postów:4
abrakadaber napisał(a):
no rzeczywiście ciężko poszukać... https://www.google.pl/search?q=delphi+generate+guid
Jest jedno "ale" w dokumentacji do enadawcy dostępnej tutaj https://e-nadawca.poczta-polska.pl/download/specyfikacja-webapi-en-v.43-7.0.1-02.02.2016.zip
czytamy
getGuid napisał(a)
Metoda pozwala pobrać lista guidów (1-100), guidy są wykorzystywane podczas transmisji danych
o przesyłkach. Każda przesyłka powinna posiadać unikalny guid. Zalecamy wykorzystywanie tej metody do nadawania guidów przesyłkom w metodzie addShipement.
Sęk w tym,że to wcale nie zwraca po prostu stringa :)

- Rejestracja:ponad 12 lat
- Ostatnio:7 miesięcy
- Postów:6610
skoro w dokumentacji jest Guid.NewGuid().ToString()
, które robi to https://msdn.microsoft.com/pl-pl/library/system.guid.newguid(v=vs.110).aspx to w delphi aby to (dostać GUID) zrobić trzeba po prostu odpalić to co masz w linku z googla.
- Rejestracja:prawie 9 lat
- Ostatnio:ponad 4 lata
- Postów:4
GUID ogarnięty tym http://abakalidis.blogspot.com/2010/12/simple-guid-generator-function-for.html ,ale...wywala mi,że Produkt nie znajduje się na umowie zawartej z Pocztą.." wrr,a to zwykły polecony,który na bank jest,bo przez interfejs www e-nadawcy przechodzi...co za szajs :/
Dodaje go metodą z 1 strony tego tematu czyli
tmp := addShipment.Create;
arr := Array_Of_przesylkaType.Create();
SetLength(arr,1);
paczka:=paczkapocztowatype.Create;
arr[0] := paczka;
tmp.przesylki := arr;
w var mam zadeklarowane
resp : addShipmentResponse;
i niżej w kodzie po w/w
resp := ten.addShipment(tmp);
i w resp[0] mam błąd nr 8304 "'Produkt ("") nie znajduje się na umowie zawartej z Poczta Polską S.A.'"
- Rejestracja:prawie 9 lat
- Ostatnio:ponad 4 lata
- Postów:4
Ja już nie wiem, czy ten system jest chory,czy ze mną coś nie tak ...
Kod https://www.dropbox.com/s/xpk56n5f05zu1mr/poczta.zip?dl=0, zdarzenie na btn2.
Niby pięknie,ładnie a jednak ostatnia linijka numernadania='' i błąd jw :/
- Rejestracja:ponad 2 lata
- Ostatnio:ponad rok
- Postów:1
Przepraszam, ze odkopuję temat, ale mam bardzo podobny problem co bdkacz. Jestem bardzo, bardzo początkującym programistą Delphi. Utrzymuję w ruchu, poprawiam i dodaje nowe funkcjonalności w starym i dużym systemie zarządzania firmą. Dostałem zlecenie wykonania integracji PP i męczę się z tym już dobry tydzień a zawiesiłem na etapie dodawania przesyłki do pakietu. Metoda addShipment zwraca mi błędy: (33203) Produkt ('Przesyłka nieobsługiwana') Nie znajduje się na umowie zawartej z PP i (81058) Przekazana planowana data dla przesyłki jest w przeszłości. Czyli najważniejszy problem to, że nie rozpoznaje przesyłki. Zmienna przesylka typu pocztex2021KurierType zawiera wszystkie moim zdaniem niezbędne dane a przesdopakietu typu Array_Of_przesylkaType jest bez danych adresowych. Czuję, że to tu jest problem. Próbowałem używać listy jak w przykładowych integracjach udostępnianych przez PP w C# ale problem jest taki sam. Bardzo proszę o pomoc.
procedure TfrmSandbox.btn5Click(Sender: TObject);
var
tEN: ElektronicznyNadawca;
tmp: addshipment;
tmpres: addShipmentResponse;
przesdopakietu: Array_Of_przesylkaType;
przesylka: pocztex2021KurierType;
getUrzNadResp: getUrzedyNadaniaResponse;
send: sendEnvelope;
sendresp: sendEnvelopeResponse;
guid: getGuid;
kom: string;
i,j: Integer;
begin
inherited;
try
//-------------------------- Wysyłka przesyłek do pakietu ----------------------
tEN := GetElektronicznyNadawca(False, '', htprPP);
tEN.clearEnvelope(clearEnvelope.Create);
guid := getGuid.Create;
guid.ilosc := 1;
przesylka := pocztex2021KurierType.Create;
przesylka.guid := tEN.getGuid(guid)[0];
przesylka.masa := 20000;
przesylka.format := formatPocztex2021Type.XL;
przesylka.mpk := 'MPK\DRS';
przesylka.adres := adresType.Create;
przesylka.adres.nazwa := 'Jan Kowalski';
przesylka.adres.ulica := 'Woronicza';
przesylka.adres.numerDomu := '12';
przesylka.adres.miejscowosc := 'Warszawa';
przesylka.adres.kodPocztowy := '00950';
przesylka.adres.telefon := '501123456';
SetLength(przesdopakietu,1);
przesdopakietu[0] := przesylka;
tmp := addShipment.Create;
tmp.przesylki := przesdopakietu;
tmpres := tEN.addShipment(tmp);
kom := '';
for i:= 0 to Length(tmpres)-1 do
begin
kom := kom + 'Numer GUID: ' + tmpres[i].guid + #13#10 +
'Numer nadania: ' + tmpres[i].numerNadania + #13#10 +
'Błędy:' + #13#10;
for j:= 0 to Length(tmpres[i].error)-1 do
begin
kom := kom + '(' + IntToStr(tmpres[i].error[j].errorNumber) + ') ' +
tmpres[i].error[j].errorDesc + #13#10;
end;
kom := kom + #13#10#13#10;
end;
MessageBoxW(Handle, PWideChar(kom),'Komunikat o błędach', MB_OK);
//----------------------------- Dostępne urzędy --------------------------------
getUrzNadResp := tEN.getUrzedyNadania(getUrzedyNadania.Create);
kom := '';
for i:= 0 to Length(getUrzNadResp)-1 do
begin
kom := kom + 'ID urzędu: ' + IntToStr(getUrzNadResp[i].urzadNadania) + #13#10 +
'Nazwa: ' + getUrzNadResp[i].nazwaWydruk + #13#10 +
'Opis: ' + getUrzNadResp[i].opis + #13#10#13#10;
end;
MessageBoxW(Handle, PWideChar(kom),'Dostępne urzędy nadania', MB_OK);
//------------------------- Wysyłka do urzędu nadania --------------------------
send := sendEnvelope.Create;
send.urzadNadania := getUrzNadResp[0].urzadNadania;
sendresp := tEN.sendEnvelope(send);
kom := '';
for i:= 0 to Length(sendresp.error)-1 do
begin
kom := kom + '(' + IntToStr(sendresp.error[i].errorNumber) + ') ' +
sendresp.error[i].errorDesc + #13#10;
end;
MessageBoxW(Handle, PWideChar(kom),'Błędy wysyłki do urzędu nadania', MB_OK);
except
raise;
end;
end;