Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- #If VBA7 Then
- Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" ( _
- ByVal CodePage As Long, _
- ByVal dwFlags As Long, _
- ByVal lpWideCharStr As LongPtr, _
- ByVal cchWideChar As Long, _
- ByVal lpMultiByteStr As String, _
- ByVal cchMultiByte As Long, _
- ByVal lpDefaultChar As LongPtr, _
- ByVal lpUsedDefaultChar As LongPtr) As Long
- Private Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" ( _
- ByVal CodePage As Long, _
- ByVal dwFlags As Long, _
- ByVal lpMultiByteStr As String, _
- ByVal cchMultiByte As Long, _
- ByVal lpWideCharStr As LongPtr, _
- ByVal cchWideChar As Long) As Long
- Private Declare PtrSafe Function GetACP Lib "kernel32" () As Long
- #Else
- Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
- ByVal CodePage As Long, _
- ByVal dwFlags As Long, _
- ByVal lpWideCharStr As Long, _
- ByVal cchWideChar As Long, _
- ByVal lpMultiByteStr As String, _
- ByVal cchMultiByte As Long, _
- ByVal lpDefaultChar As Long, _
- ByVal lpUsedDefaultChar As Long) As Long
- Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
- ByVal CodePage As Long, _
- ByVal dwFlags As Long, _
- ByVal lpMultiByteStr As String, _
- ByVal cchMultiByte As Long, _
- ByVal lpWideCharStr As Long, _
- ByVal cchWideChar As Long) As Long
- Private Declare Function GetACP Lib "kernel32" () As Long
- #End If
- Sub test()
- '
- ' test Makro
- '
- ' Klawisz skrótu: Ctrl+d
- '
- Dim api As String
- Dim id As String ' ID sesji
- Dim klucz As String 'klucz
- Dim odp As String
- Dim NIP As String
- api = ActiveSheet.Range("B1").Value
- klucz = ActiveSheet.Range("B2").Value
- NIP = ActiveSheet.Range("B3").Value
- NIP = Replace(NIP, "-", "")
- 'If Len(NIP) <> 10 Then
- ' MsgBox ("Brak właściwego numeru NIP!")
- ' End
- 'End If
- ' zalogowanie
- With CreateObject("winhttp.winhttprequest.5.1")
- .Open "POST", api, False
- .setRequestHeader "Content-Type", "application/soap+xml;charset=UTF-8;"
- .send "" & _
- "<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:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>" & _
- "<wsa:To>" + api + "</wsa:To>" & _
- "</soap:Header>" & _
- "<soap:Body>" & _
- "<ns:Zaloguj>" & _
- "<ns:pKluczUzytkownika>" + klucz + "</ns:pKluczUzytkownika>" & _
- "</ns:Zaloguj>" & _
- "</soap:Body>" & _
- "</soap:Envelope>"
- odp = .responseText
- If Len(odp) = 0 Then
- MsgBox ("Nie można uzyskać sesji z usługi sieciowej GUSu!")
- End
- End If
- id = Split(odp, "ZalogujResult>")(1)
- id = Left(id, Len(id) - 2)
- End With
- ' pobierz po nipie
- With CreateObject("winhttp.winhttprequest.5.1")
- .Open "POST", api, False
- .setRequestHeader "Content-Type", "application/soap+xml; charset=UTF-8;"
- .setRequestHeader "sid", id
- .send "" & _
- "<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:ns=""http://CIS/BIR/PUBL/2014/07"" xmlns:dat=""http://CIS/BIR/PUBL/2014/07/DataContract"">" & _
- "<soap:Header xmlns:wsa=""http://www.w3.org/2005/08/addressing"">" & _
- "<wsa:To>" + api + "</wsa:To>" & _
- "<wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneSzukajPodmioty</wsa:Action>" & _
- "</soap:Header>" & _
- "<soap:Body>" & _
- "<ns:DaneSzukajPodmioty>" & _
- "<ns:pParametryWyszukiwania>" & _
- "<dat:Regon>" + NIP + "</dat:Regon>" & _
- "</ns:pParametryWyszukiwania>" & _
- "</ns:DaneSzukajPodmioty>" & _
- "</soap:Body>" & _
- "</soap:Envelope>"
- odp = VBA.Strings.StrConv(.responseBody, vbUnicode)
- odp = tekstCodePageToCodePage(odp, 65001, 1250) ' zmiana strony kodowej
- odp = Replace(odp, "<", "<")
- odp = Replace(odp, ">", ">")
- Dim a As String
- Debug.Print odp
- ' szukanie błędów
- If (InStr(odp, "ErrorCode")) Then
- a = Split(odp, "ErrorCode>")(1)
- a = Left(a, Len(a) - 2)
- If (a) Then
- Dim errorPl As String
- Dim errorEN As String
- Dim errorNIP As String
- errorPl = Split(odp, "ErrorMessagePl>")(1)
- errorPl = Left(errorPl, Len(errorPl) - 2)
- errorEN = Split(odp, "ErrorMessageEn>")(1)
- errorEN = Left(errorEN, Len(errorEN) - 2)
- errorNIP = Split(odp, "Nip>")(1)
- errorNIP = Left(errorNIP, Len(errorNIP) - 2)
- MsgBox (errorPl + Chr(13) + errorEN + Chr(13) + "NIP: " + errorNIP)
- End
- End If
- End If
- Debug.Print odp
- a = Split(odp, "DaneSzukajPodmiotyResult>")(1)
- a = Left(a, Len(a) - 2)
- Dim sXml As String
- Dim dom As MSXML2.DOMDocument60
- Set dom = New MSXML2.DOMDocument60
- dom.LoadXML a
- Debug.Assert dom.parseError = 0
- Dim xmlSomeCData As MSXML2.IXMLDOMElement
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/StatusNip")
- ActiveSheet.Range("B5").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Regon")
- ActiveSheet.Range("B6").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Nazwa")
- ActiveSheet.Range("B7").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Wojewodztwo")
- ActiveSheet.Range("B8").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Powiat")
- ActiveSheet.Range("B9").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Gmina")
- ActiveSheet.Range("B10").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Miejscowosc")
- ActiveSheet.Range("B11").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/KodPocztowy")
- ActiveSheet.Range("B12").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Ulica")
- ActiveSheet.Range("B13").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/NrNieruchomosci")
- ActiveSheet.Range("B14").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/NrLokalu")
- ActiveSheet.Range("B15").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/DataZakonczeniaDzialalnosci")
- ActiveSheet.Range("B16").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/MiejscowoscPoczty")
- ActiveSheet.Range("B17").Value = xmlSomeCData.Text
- Set xmlSomeCData = dom.SelectSingleNode("root/dane/Nip")
- ActiveSheet.Range("B18").Value = xmlSomeCData.Text
- End With
- ' wyloguj
- With CreateObject("winhttp.winhttprequest.5.1")
- .Open "POST", "https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc", False
- .setRequestHeader "Content-Type", "application/soap+xml;charset=UTF-8;"
- .send "" & _
- "<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:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Wyloguj</wsa:Action>" & _
- "<wsa:To>https://wyszukiwarkaregon.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>" & _
- "</soap:Header>" & _
- "<soap:Body>" & _
- "<ns:Wyloguj>" & _
- "<ns:pIdentyfikatorSesji>" + id + "</ns:pIdentyfikatorSesji>" & _
- "</ns:Wyloguj>" & _
- "</soap:Body>" & _
- "</soap:Envelope>"
- odp = .responseText
- End With
- End Sub
- Public Function tekstCodePageToCodePage(sStrIn As String, lFromCP As Long, lOutCP As Long) As String
- Dim lLenStrOut As Long
- Dim sAscii As String
- Dim lLenAscii As Long
- Dim lCurrentCP As Long
- lCurrentCP = GetACP
- If lFromCP = lCurrentCP Then
- sAscii = sStrIn
- Else
- lLenAscii = MultiByteToWideChar(lFromCP, 0&, sStrIn, Len(sStrIn), 0&, 0&)
- sAscii = String$(lLenAscii, vbNullChar)
- lLenAscii = MultiByteToWideChar(lFromCP, 0&, sStrIn, Len(sStrIn), StrPtr(sAscii), lLenAscii)
- End If
- If lOutCP = lCurrentCP Then
- tekstCodePageToCodePage = sAscii
- Else
- lLenStrOut = WideCharToMultiByte(lOutCP, 0&, StrPtr(sAscii), Len(sAscii), 0&, 0&, 0&, 0&)
- tekstCodePageToCodePage = String$(lLenStrOut, vbNullChar)
- lLenStrOut = WideCharToMultiByte(lOutCP, 0&, StrPtr(sAscii), Len(sAscii), tekstCodePageToCodePage, lLenStrOut, 0&, 0&)
- End If
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement