Biała lista podatników i błąd w REST Debugger

Odpowiedz Nowy wątek
2019-09-05 23:46
0

Cześć,

od kilku dni dostępne jest api MF do sprawdzenia czy podatnik jest na białej liście i na jakie konto należy wykonywać przelew aby nie mieć problemów.

Oczywiście już tam zajrzałem ale okazało się że mam problem.

Informacja i jakaś dokumentacja znajduje się tutaj: https://www.gov.pl/web/kas/api-wykazu-podatnikow-vat

Oto przykładowy adres do sprawdzenia (jest to Orlen): https://wl-api.mf.gov.pl/api/[...]ip/7740001454?date=2019-08-01
w przeglądarce czy jakimkolwiek testerze REST-a otrzymacie prawidłowy wynik, niestety REST Debugger z Delphi wyświetla błąd serwera 500 (gdy link będzie zły otrzymacie błąd 400 czyli coś tam działa).

Możecie sprawdzić u siebie czy macie podobnie?

edytowany 1x, ostatnio: furious programming, 2019-09-06 22:34

Pozostało 580 znaków

2020-01-08 20:30
0

@zizu77 musisz po prostu obsłużyć błędy. W przypadku błędu INDY wali wyjątkiem i nic z tym nie zrobisz. Obsłuż ten wyjątek, a będzie ok. Nie piszę w Delphi, ale w C++ będzie to mniej więcej coś takiego (zakładając IdHTTP oraz IdSSLIOHandlerSocketOpenSSL położone na formatce oraz poprawnie ustawione wartości):

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TStringStream *ResponseData = new TStringStream();
  try
  {
    IdHTTP->Get("https://wl-test.mf.gov.pl/api/search/nip/32451745046?date=2019-08-01",ResponseData);
  }
  catch (EIdHTTPProtocolException &E)
  {
    ShowMessage(E.ErrorMessage);
  }

  if (IdHTTP->ResponseCode == 200)
  {
    ShowMessage(ResponseData->DataString);
  }
  delete ResponseData;
}
//---------------------------------------------------------------------------

Pozostało 580 znaków

2020-01-09 07:15
0

To mam oczywiście obsłużone w klasie wyżej łapię wyjątek który brzmi mniej więcej E.Message="HTTP 400". Nie powinien on lecieć tylko powinien zwrócić poprawnego jsona z kodem błędu oraz wyjaśnieniem przyczyny, tymczasem wali exception.
Może to kwestia wpisania czegoś magicznego np:

IdHTTP.Request.Accept := 'application/json,text/plain;q=0.9,text/html;q=0.8';
IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

Wpisuję też tak ale nie pomaga.

edytowany 2x, ostatnio: furious programming, 2020-01-09 08:00

Pozostało 580 znaków

2020-01-09 09:58
1

Masz błędne zapytanie tak jak dostajesz odpowiedź numer konta powinien mieć 26 znaków a u Ciebie ma 25 tak samo NIP powinien mieć 10 znaków a w przykładzie wyżej ma 11.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
No ale o co Ci chodzi? Przecież łączna ilość znaków się zgadza, po prostu jedna literka przeskoczyłą z numeru konta do NIP ;) - cerrato 2020-01-09 10:00
Tak to jest jak się testuje na gotowym przykładowym zapytaniu nie weryfikując poprawności przykładowych danych ale przecież dostaje odpowiedź co jest nie tak i tego nie sprawdza tylko nie wiadomo gdzie szuka przyczyny błędu. - kAzek 2020-01-09 10:07

Pozostało 580 znaków

2020-01-09 10:13
1

Tak mam błędnie napisany numer konta (świadomie) ma mieć 26 znaków a ma 25. I oczekuję że dostanę json z wyjaśnieniem przyczyny błędu a nie error 400. Wklej to zapytanie na stronę internetową i dostaniesz piękną odpowiedź:

{"code":"WL-109","message":"Pole 'numer konta' ma nieprawidłową długość. Wymagane 26 znaków (6523600018007640000010744)."}

Niestety zamiast tego co zwraca przeglądarka ja dostaję tylko HTTP 400.

edytowany 2x, ostatnio: furious programming, 2020-01-09 10:29
Nie cytuj całego posta, jeśli odpowiadasz zaraz pod nim i do jego całości się odnosisz. - furious programming 2020-01-09 10:29

Pozostało 580 znaków

2020-01-09 10:47
3

Musisz obsłużyć wyjątek coś w stylu:

  try
    Memo1.Text:= IdHTTP1.Get(lRequest);
  except
    on E: EIdHTTPProtocolException do begin
      if E.ErrorCode = 400 then
        Memo1.Text:= E.ErrorMessage;
    end;
  end;

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
dzięki wielkie, w sumie łapałem ale nie jako EIdHTTPProtocolException tylko zwykły Exception który dawał tylko HTTP 400. - zizu77 2020-01-09 11:24

Pozostało 580 znaków

2020-01-09 13:58
0
zizu77 napisał(a):

To mam oczywiście obsłużone w klasie wyżej łapię wyjątek który brzmi mniej więcej E.Message="HTTP 400". Nie powinien on lecieć tylko powinien zwrócić poprawnego jsona z kodem błędu oraz wyjaśnieniem przyczyny, tymczasem wali exception.

I właśnie mój kod tak działa. ShowMessage w catchu wypisuje tego JSONa o którego Ci chodzi. Co do wywalania wyjątku to po prostu INDY tak jest napisane. Nie znam innych bibliotek tam to może jest zorganizowane inaczej. Jednak tu jest tak i należy wyłapać odpowiedni wyjątek, wszystko jest w dokumentacji ładnie opisane :)

Pozostało 580 znaków

2020-01-15 22:10
0

Czy dalej jest to ograniczenie do 10 wyszukań, czy pomaga odpowiedni nagłówek, useragent itp?
A jeśli są ograniczenia, to czy może ktoś korzystał z tzw. pliku płaskiego, który codziennie można ściągnąć:
https://www.podatki.gov.pl/va[...]z-podatnikow-vat/plik-plaski/
W środku są zahaszowane SHA512 dane podatników w postaci
RRRRMMDDNIP0000000NRKONTA0000000000000000000
Testowałem wyliczanie hasha choćby online dla konkretnego podatnika, podajac date, nip i nr konta, ale nie udalo mi sie znaleźć potem tego hasza w pliku, może ktoś próbował?

Pozostało 580 znaków

2020-01-16 20:09
0
Kristof napisał(a):

Czy dalej jest to ograniczenie do 10 wyszukań, czy pomaga odpowiedni nagłówek, useragent itp?

Nie, nic nie pomaga. Ponieważ limit jest na IP. Więc w dużych firmach gdzie systemy finansowo-księgowe są zainstalowane na wielu komputerach te API z takim limitem jest zupełnie bez sensu.

Kristof napisał(a):

W środku są zahaszowane SHA512 dane podatników w postaci
RRRRMMDDNIP0000000NRKONTA0000000000000000000
Testowałem wyliczanie hasha choćby online dla konkretnego podatnika, podajac date, nip i nr konta, ale nie udalo mi sie znaleźć potem tego hasza w pliku, może ktoś próbował?

Popatrz, że tam jest liczba iteracji jaką należy wykonać podczas liczenia hasha i dopiero wtedy wyszukujemy w pliku żądaną wartość SHA512 Liczenie skrótu od skrótu

Ogólnie całe te API oraz plik bardziej przypomina zabawkę niż cokolwiek użytecznego.

Pozostało 580 znaków

2020-01-16 23:36
0

Hah 5000 iteracji! Jutro to sprawdzę i zobaczymy:)

Pozostało 580 znaków

2020-01-17 19:39
0

Tylko patrz, że liczba iteracji może być zmienna, ponieważ znajduje się w pliku ;) W razie czego daj znać, bo sam jestem ciekaw jak to będzie działało.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Użytkownik: Panczo