Siemka!
Mam do napisania prosty skrypt, który będzie się integrował z API GUS i stamtąd będzie on pobierał informacje na temat NIP (a bardziej będzie sprawdzał, czy taki NIP jest zapisany w bazie). Jest jednak pewien problem - wywala komunikat w konsoli przeglądarki, który nawet już wcześniej miałem nieprzyjemność widzieć przy okazji obsługi innego API, ale tamten problem ostatecznie rozwiązałem. Tutaj jednak siedzę już kilka godzin i nie mam już pomysłów co z tym fantem zrobić.
Błąd:
Access to XMLHttpRequest at 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl-ver11-prod.wsdl' from origin has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.
Kod JS, który wysyła zapytanie:
function soap() {
const url = 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl-ver11-prod.wsdl';
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', url, true);
// build SOAP request
var sr =
' <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">'+
' <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">'+
'<wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>'+
'<wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>'+
'</soap:Header>'+
'<soap:Body>'+
'<ns:Zaloguj>'+
' <ns:pKluczUzytkownika>klucz</ns:pKluczUzytkownika>'+
'</ns:Zaloguj>'+
'</soap:Body>'+
'</soap:Envelope>';
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert(xmlhttp.responseText);
// alert('done. use firebug/console to see network response');
}
}
}
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'application/soap+xml; charset=utf-8');
xmlhttp.send(sr);
// send request
// ...
}
soap();
Wcześniej też znalazłem integracje w PHP, która na prawdę spoko działa, ale niestety php w tym przypadku mi się nie przyda. Podrzucam jednak poniżej kod, który znalazłem w necie - mam nadzieję, że autor kodu nie obrazi się, za cytowanie jego kodu, bo zwyczajnie w świecie zgubiłem link do github'a.
<?php
class GusRegonApi{
//adresy produkcyjne
protected $loginUrl = 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc/ajaxEndpoint/Zaloguj';
protected $searchDataUrl = 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc/ajaxEndpoint/daneSzukaj';
//adresy testowe
protected $loginTestUrl = 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc/ajaxEndpoint/Zaloguj';
protected $searchDataTestUrl = 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc/ajaxEndpoint/daneSzukaj';
//tutaj wpisan klucz do GUS - obecnie testowy
protected $key = "klucz";
protected $session = null;
protected function makeCurl($field,$url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $field);
curl_setopt($curl, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json','Content-Length: '.strlen($field), 'sid:'.$this->session]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36');
curl_setopt($curl, CURLOPT_HEADER, false);
$result = curl_exec($curl);
curl_close($curl);
if($this->session==null){
return json_decode($result)->d;
}else{
return str_replace('\u000d\u000a','',$result);
}
}
protected function login(){
$login = json_encode(["pKluczUzytkownika" => $this->key]);
$result = $this->makeCurl($login,$this->loginTestUrl);
return $result;
}
public function checkNip($nip){
if($this->session==null){
$this->session = $this->login();
}
$searchData = json_encode([
'jestWojPowGmnMiej' => true,
'pParametryWyszukiwania' => [
'AdsSymbolGminy' => null,
'AdsSymbolMiejscowosci' => null,
'AdsSymbolPowiatu' => null,
'AdsSymbolUlicy' => null,
'AdsSymbolWojewodztwa' => null,
'Dzialalnosci' => null,
'FormaPrawna' => null,
'Krs' => null,
'Krsy' => null,
'NazwaPodmiotu' => null,
'Nip' => $nip,
'Nipy' => null,
'NumerwRejestrzeLubEwidencji' => null,
'OrganRejestrowy' => null,
'PrzewazajacePKD' => false,
'Regon' => null,
'Regony14zn' => null,
'Regony9zn' => null,
'RodzajRejestru' => null,
]
]
);
$result = $this->makeCurl($searchData,$this->searchDataTestUrl);
return $result;
}
}
Jakieś pomysły? Dodam oczywiście na starcie, że to nie wina klucza - ukryłem go po prostu :)
Descendant