API SOAP Ministerstwa Finansów "sprawdź status VAT" - połączenie w js z przeglądarki

0
function soap() {
    var req = new XMLHttpRequest();
    req.open('POST', 'https://sprawdz-status-vat.mf.gov.pl', true);

    var sr ='<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01"><SOAP-ENV:Body><ns1:NIP>6920000013</ns1:NIP></SOAP-ENV:Body></SOAP-ENV:Envelope>';

    req.onreadystatechange = function () {
        if (req.readyState == 4) {
            if (req.status == 200) {
                console.log(req.responseText);
            }
        }
    }

    //req.withCredentials = 'false';
    //req.setRequestHeader('Accept-Language', 'lang=pl-PL');
    req.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
    req.setRequestHeader("SOAPAction", "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01/WeryfikacjaVAT/SprawdzNIP");

    req.send(sr);

}

Próbuję z użyciem w/w funkcji przesłać z przeglądarki na serwer MF komunikat SOAP i uzyskać odpowiedź o statusie VAT zadanego podatnika.
1) Jeżeli żaden z nagłówków "setRequestHeader" nie jest ustawiony dostaję komunikat:

[HTTP/1.1 415 Cannot process the message because the content type 'text/plain;charset=UTF-8' was not the expected type 'text/xml; charset=utf-8'. 78ms]

2) Jeżeli jest ustawiony nagłówek "Content-Type" oraz jakikolwiek inny zakomentowany dostaję komunikat:

[HTTP/1.1 400 Bad Request 78ms]
Zablokowano żądanie do zasobu innego pochodzenia: zasady „Same Origin Policy” nie pozwalają wczytywać zdalnych zasobów z „https://sprawdz-status-vat.mf.gov.pl/” (żądanie CORS OPTIONS się nie powiodło).
Zablokowano żądanie do zasobu innego pochodzenia: zasady „Same Origin Policy” nie pozwalają wczytywać zdalnych zasobów z „https://sprawdz-status-vat.mf.gov.pl/” (nieudane żądanie CORS).

O ile mi wiadomo wymagane są nagłówki co najmniej "Content-Type" i "SOAPAction" .....ale mogę się mylić. CORS mam wyłączony w firefox wtyczką " Allow CORS: Access-Control-Allow-Origin". Czy ktoś potrafi rozpoznać na czym polega problem i jak go rozwiązać ? Wysyłany komunikat na pewno jest prawidłowy, jeżeli coś miało by brakować to raczej w nagłówkach.

Pomocne linki:
Specyfikacja PDF API MF:
https://www.podatki.gov.pl/media/3275/specyfikacja-we-wy.pdf
Specyfikacja WDSL API MF:
https://sprawdz-status-vat.mf.gov.pl/?wsdl
(Podobno) działające kody w C# i VBScript:
Program do sprawdzania danych z bazy www

0

Skorzystaj z biblioteki SOAP https://www.npmjs.com/package/soap, będzie prościej.

Tutaj masz przykładowy kod:

var soap = require('soap');

var url = 'https://sprawdz-status-vat.mf.gov.pl/?wsdl';
var args = { nip: '5260250995' };

soap.createClient(url, function(err, client) {
    client.SprawdzNIP(args, function(err, result) {
        console.log(result);
    });
});

lub asynchronicznie:

const soap = require('soap');

async function checkNIP(nip) {
    const url = 'https://sprawdz-status-vat.mf.gov.pl/?wsdl';

    const client = await soap.createClientAsync(url);
    const response = await client.SprawdzNIPAsync({ nip });

    return response;
}

checkNIP('5260250995').then(console.log).catch(console.error);

Tutaj przykład na żywo (z async await): https://runkit.com/tetrash/soap-example

0

Dzięki za sugestię Karolu, tylko że ja mam na myśli komunikację przeglądarki z API MF bezpośrednio bez udziału Node - a dla niego jest przeznaczona opisana biblioteka.

0

https://github.com/mmilch/SprawdzanieStatusuVATPodatnika

Ogarnąłem temat, problemem był wciąż CORS. Dla zainteresowanych w/w kod do walidacji NIP i sprawdzania statusu VAT podatnika. Reguły CORS są ominięte dzięki darmowemu proxy 'cors-anywhere'. W/w kod można odpalać bez instalacji czegokolwiek po stronie serwera.

Przykład:

checkVatStatus('9999999999', 1, 'some_id');

#zrzucenie wyniku kontroli NIP'u 9999999999 do wybranego elementu 'some_id'. Drugi parametr (0 lub 1) definiuje typ zwracanego komunikatu wg specyfikacji MF

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