897 lines
34 KiB
VB.net
897 lines
34 KiB
VB.net
Imports System.IO
|
|
Imports System.Xml.Linq
|
|
Imports com.sun.xml.internal.rngom.parse.compact
|
|
Imports Org.BouncyCastle.Ocsp
|
|
Imports Polly
|
|
Imports CC015B_TR_EXT_V4_3
|
|
Imports CC304A_v10_0
|
|
Imports CC305A_v10_0
|
|
Imports CC316A_v10_0
|
|
Imports CC328A_v10_0
|
|
Imports ENS_CC315A
|
|
Imports VERAG_PROG_ALLGEMEIN.ENS_CC315A
|
|
Imports VERAG_PROG_ALLGEMEIN.CC304A_v10_0
|
|
Imports VERAG_PROG_ALLGEMEIN.CC316A_v10_0
|
|
Imports VERAG_PROG_ALLGEMEIN.CC328A_v10_0
|
|
Imports VERAG_PROG_ALLGEMEIN.CC305A_v10_0
|
|
|
|
Public Class cHMRC_ENS
|
|
|
|
|
|
'---> VERAG AG!!! GVMS use 26 86 22 45 50 78?
|
|
Public Shared ApplicationName = "AVISO_ENS"
|
|
Public Shared ApplicationID = "af3dc225-6726-4cba-98e6-9b8df39b4c20"
|
|
Public Shared Client_ID = "Qbwx6C1YYdc6q4XM0aWOKZGH0zyO"
|
|
Public Shared Client_Secret = "143a33cc-33c8-43bb-bcca-51186ac52855"
|
|
Public Shared TEST As Boolean = True
|
|
|
|
|
|
|
|
|
|
Shared Function helloWorldENS(ByVal response As String) As Boolean
|
|
Try
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS_HELLOWORLD")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
' HTTP-Client initialisieren
|
|
Dim http As New Chilkat.Http
|
|
|
|
' Falls das Token fehlt, Hinweis ausgeben
|
|
If String.IsNullOrEmpty(TOKEN.token_BEARER_TOKEN) Then
|
|
Console.WriteLine("Fehler: Kein OAuth2-Token gefunden!")
|
|
Return False
|
|
End If
|
|
|
|
' Setze die benötigten Header
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
http.SetRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
|
http.SetRequestHeader("Authorization", "Bearer " & TOKEN.token_BEARER_TOKEN)
|
|
|
|
' API-Endpunkt für User-Restricted Hello API
|
|
Dim url As String = "https://test-api.service.hmrc.gov.uk/hello/application"
|
|
'Dim url As String = "https://test-api.service.hmrc.gov.uk/hello/user"
|
|
|
|
' API-Anfrage senden
|
|
response = http.QuickGetStr(url)
|
|
|
|
' Fehlerbehandlung
|
|
If (http.LastMethodSuccess <> True) Then
|
|
Console.WriteLine("Fehler: " & http.LastErrorText)
|
|
MsgBox("Fehler: " & http.LastErrorText)
|
|
Else
|
|
Console.WriteLine("Antwort von HMRC API: " & response)
|
|
MsgBox("Antwort von HMRC API: " & response)
|
|
End If
|
|
Return True
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
Return False
|
|
End Function
|
|
Shared Function insertENS(ENS_CC315A As CC315AType, ByVal responseStr As String, Optional forceRefrehtoken As Boolean = False) As Boolean
|
|
Try
|
|
' Chilkat-Objekt initialisieren
|
|
' Dim http As New Chilkat.Http()
|
|
|
|
|
|
' EORI-Nummer für die Überprüfung
|
|
'Dim eoriNumber As String = "GB123456789000"
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
'-------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
'TEEST:::
|
|
|
|
ENS_CC315A = CC315AType.LoadFromFile("D:\Andreas\TMP\CC315A_Example1.xml")
|
|
ENS_CC315A.DatOfPreMES9 = Now.ToString("yyMMdd")
|
|
ENS_CC315A.TimOfPreMES10 = Now.ToString("HHmm")
|
|
|
|
If False Then
|
|
If ENS_CC315A Is Nothing Then
|
|
'Return False 'FEHLER!??!?
|
|
ENS_CC315A = New CC315AType '-> nur zum testen
|
|
End If
|
|
If ENS_CC315A.MesSenMES3 Is Nothing OrElse ENS_CC315A.MesSenMES3 = "" Then
|
|
ENS_CC315A.MesSenMES3 = "GB552556002342" 'TEST USER 790949012321
|
|
End If
|
|
|
|
ENS_CC315A.DatOfPreMES9 = Now.ToString("yyMMdd")
|
|
ENS_CC315A.TimOfPreMES10 = Now.ToString("HHmm")
|
|
ENS_CC315A.MesIdeMES19 = "ABCD1234"
|
|
'ENS_CC315A.MesTypMES20 = "CC315A"
|
|
|
|
ENS_CC315A.HEAHEA.RefNumHEA4 = "ABCD1234"
|
|
ENS_CC315A.HEAHEA.TraModAtBorHEA76 = "4"
|
|
ENS_CC315A.HEAHEA.TotNumOfIteHEA305 = "1"
|
|
End If
|
|
|
|
|
|
'-------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS", forceRefrehtoken)
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Authentifizierung: Setzen des Bearer-Tokens
|
|
http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Setzen des Content-Type-Headers für die Anfrage
|
|
|
|
If cHMRC_ENS.TEST Then
|
|
Dim mode = "Accept"
|
|
http.SetRequestHeader("simulateRiskingResponse", mode)
|
|
http.SetRequestHeader("simulateInterventionResponse", True)
|
|
|
|
|
|
|
|
End If
|
|
http.SetRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
|
|
|
' Definieren Sie die URL für die POST-Anfrage
|
|
Dim urlHTTP As String = url & "/customs/imports/declarations"
|
|
Dim xmlContent As String = ENS_CC315A.Serialize
|
|
|
|
xmlContent = File.ReadAllText("D:\Andreas\TMP\CC315A_Example1.xml")
|
|
|
|
MsgBox(xmlContent)
|
|
' Senden Sie die POST-Anfrage mit dem XML-Inhalt
|
|
Dim response As Chilkat.HttpResponse = http.PostXml(urlHTTP, xmlContent, "utf-8")
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return False
|
|
End If
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 202) Then
|
|
Console.WriteLine("Entry Summary Declaration erfolgreich eingereicht.")
|
|
Console.WriteLine("Antwort:")
|
|
Console.WriteLine(response.BodyStr)
|
|
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim RESP = SuccessResponse_v2_0.SuccessResponse.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
|
|
Return True
|
|
ElseIf (response.StatusCode = 400) Then
|
|
|
|
Console.WriteLine("Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
|
|
|
|
Dim errTxt = ""
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim RESP = errorresponse_v2_0.ErrorResponse.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
For Each Erline In RESP.Error
|
|
errTxt &= String.Join(", ", Erline.Text) & vbNewLine & vbNewLine
|
|
Next
|
|
|
|
|
|
MsgBox(errTxt)
|
|
|
|
Return False
|
|
|
|
|
|
Else
|
|
Console.WriteLine("Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
|
|
|
|
Return False
|
|
|
|
End If
|
|
|
|
|
|
|
|
'Dim req As New Chilkat.HttpRequest()
|
|
|
|
'' Setze deine HMRC API-Credentials
|
|
'http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
'req.HttpVerb = "POST"
|
|
'req.Path = "/customs/imports/declarations"
|
|
'req.ContentType = "application/xml"
|
|
'req.Charset = "utf-8"
|
|
'req.SendCharset = True
|
|
|
|
'' Füge das XML als Body hinzu
|
|
'req.LoadBodyFromString(ENS_CC315A.Serialize, "utf-8")
|
|
|
|
'' Füge benötigte Header hinzu
|
|
'req.AddHeader("Accept", "application/vnd.hmrc.1.0+xml") '"application/vnd.hmrc.1.0+xml")
|
|
'req.AddHeader("Content-Type", "application/xml; charset=UTF-8") '"application/xml")
|
|
'req.AddHeader("Authorization", "Bearer " & TOKEN.token_BEARER_TOKEN)
|
|
|
|
'MsgBox(TOKEN.token_BEARER_TOKEN)
|
|
'' Sende die Anfrage
|
|
'Dim resp As Chilkat.HttpResponse = http.SynchronousRequest(url, 443, True, req)
|
|
|
|
'If resp Is Nothing Then
|
|
' Console.WriteLine("Fehler: " & http.LastErrorText)
|
|
'Else
|
|
' Console.WriteLine("Status Code: " & resp.StatusCode)
|
|
' Console.WriteLine("Antwort: " & resp.BodyStr)
|
|
'End If
|
|
|
|
'Return True
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return False
|
|
End Function
|
|
|
|
|
|
Shared Function amendENS(MRN As String, ByRef CC313AResponse As CC315AType) As Boolean
|
|
|
|
Try
|
|
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http
|
|
|
|
|
|
' Token hinzufügen (z. B. Bearer Token für Authentifizierung)
|
|
http.SetRequestHeader("Authorization", "Bearer " & TOKEN.token_BEARER_TOKEN)
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Setzen des Content-Type-Headers (kann erforderlich sein)
|
|
http.SetRequestHeader("Content-Type", "application/xml; charset=UTF-8")
|
|
|
|
If cHMRC_ENS.TEST Then
|
|
Dim mode = "Accept"
|
|
http.SetRequestHeader("simulateRiskingResponse", mode)
|
|
End If
|
|
|
|
' Definieren Sie die URL für die PUT-Anfrage
|
|
Dim urlHttp As String = url & "/customs/imports/declarations/" & MRN & ""
|
|
|
|
' Senden Sie die PUT-Anfrage ohne Body
|
|
Dim xmlContent = File.ReadAllText("D:\Andreas\TMP\example_Amend.xml")
|
|
|
|
MsgBox(xmlContent)
|
|
' Senden Sie die POST-Anfrage mit dem XML-Inhalt
|
|
|
|
|
|
' Sende die PUT-Anfrage mit XML-Daten
|
|
|
|
Dim response As Chilkat.HttpResponse = http.PText("PUT", urlHttp, xmlContent, "utf-8", "application/xml", False, False)
|
|
' Dim response As Chilkat.HttpResponse = http.QuickRequest("PUT", urlHttp)
|
|
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return False
|
|
End If
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 200) Then
|
|
Console.WriteLine("Entry Summary Declaration erfolgreich geändert.")
|
|
Console.WriteLine("Antwort:")
|
|
Console.WriteLine(response.BodyStr) ' XML-Ausgabe der Antwort
|
|
|
|
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
CC313AResponse = CC315AType.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
|
|
Return True
|
|
Else
|
|
Console.WriteLine("❌ Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return False
|
|
End If
|
|
|
|
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return False
|
|
End Function
|
|
|
|
|
|
Shared Function getListOfENSOutcomes() As List(Of HmrcOutcomes)
|
|
|
|
Try
|
|
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Authentifizierung: Setzen des Bearer-Tokens
|
|
http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Definieren Sie die URL für die GET-Anfrage
|
|
Dim urlHttp As String = url & "/customs/imports/outcomes/"
|
|
|
|
' Senden Sie die GET-Anfrage
|
|
Dim response As Chilkat.HttpResponse = http.QuickRequest("GET", urlHttp)
|
|
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return Nothing
|
|
End If
|
|
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 204) Then
|
|
|
|
Console.WriteLine("Ergebnis: Kein Inhalt!")
|
|
Console.WriteLine(response.BodyStr)
|
|
Return Nothing
|
|
|
|
End If
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 200) Then
|
|
Console.WriteLine("Liste der Outcomes erfolgreich abgerufen:")
|
|
Console.WriteLine(response.BodyStr) ' XML-Ausgabe der Antwort
|
|
Dim HmrcOutcomesList As List(Of HmrcOutcomes) = ParseHmrcXmlResponseOutcomes(response.BodyStr)
|
|
|
|
|
|
Return HmrcOutcomesList
|
|
Else
|
|
Console.WriteLine("Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return Nothing
|
|
End If
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return Nothing
|
|
End Function
|
|
|
|
|
|
Shared Function retrieveENSOutcome(correlationId, ByRef TypeOfResonse, ByRef ResponseClass) As Boolean
|
|
|
|
Try
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Authentifizierung: Setzen des Bearer-Tokens
|
|
http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Definieren Sie die URL für die GET-Anfrage
|
|
|
|
'If cHMRC_ENS.TEST Then
|
|
' Dim mode = "Accept"
|
|
' http.SetRequestHeader("simulateRiskingResponse", mode)
|
|
'End If
|
|
|
|
|
|
Dim urlHttp As String = url & "/customs/imports/outcomes/" & correlationId & ""
|
|
MsgBox(urlHttp)
|
|
' Senden Sie die GET-Anfrage
|
|
Dim response As Chilkat.HttpResponse = http.QuickRequest("GET", urlHttp)
|
|
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return Nothing
|
|
End If
|
|
|
|
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 200) Then
|
|
Console.WriteLine("Outcome erfolgreich abgerufen:")
|
|
Console.WriteLine(response.BodyStr) ' XML-Ausgabe der Antwort
|
|
|
|
If response.BodyStr.Contains("CC328A") Then ' ANTWORT OK New submission accepted:
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim CC328A = CC328AType.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
TypeOfResonse = "CC328A"
|
|
ResponseClass = CC328A
|
|
Return True
|
|
|
|
ElseIf response.BodyStr.Contains("CC316A") Then ' ANTWORT OK New submission rejected:
|
|
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim CC316A = CC316AType.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
TypeOfResonse = "CC316A"
|
|
ResponseClass = CC316A
|
|
Return True
|
|
|
|
ElseIf response.BodyStr.Contains("CC304A") Then ' Amended submission accepted
|
|
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim CC304A = CC304AType.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
TypeOfResonse = "CC304A"
|
|
ResponseClass = CC304A
|
|
Return True
|
|
|
|
ElseIf response.BodyStr.Contains("CC305A") Then ' Amended submission rejected
|
|
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim CC305A = CC305AType.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
TypeOfResonse = "CC305A"
|
|
ResponseClass = CC305A
|
|
Return True
|
|
End If
|
|
Else
|
|
Console.WriteLine("Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return Nothing
|
|
End If
|
|
|
|
|
|
' The Outcome for the Correlation ID (schema here).
|
|
|
|
'An accepted outcome which Is successful will contain a Movement Reference Number. A rejected outcome will contain one Or more errors. Accordingly, the content of response element will be based on one of the following schemas:
|
|
|
|
' New submission accepted schema http //ics.dgtaxud.ec/CC328A.
|
|
' New submission rejected: schema http: //ics.dgtaxud.ec/CC316A.
|
|
' Amended submission accepted: schema http: //ics.dgtaxud.ec/CC304A.
|
|
' Amended submission rejected: schema http: //ics.dgtaxud.ec/CC305A.
|
|
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return Nothing
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Shared Function acknowlageENSOutcome(correlationId) As Boolean
|
|
|
|
Try
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Authentifizierung: Setzen des Bearer-Tokens
|
|
http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Setzen des Content-Type-Headers für die Anfrage
|
|
http.SetRequestHeader("Content-Type", "application/xml")
|
|
|
|
' Definieren Sie die URL für die POST-Anfrage
|
|
Dim urlHttp As String = url & "/customs/imports/outcomes/" & correlationId & ""
|
|
' Senden Sie die POST-Anfrage ohne Body
|
|
Dim response As Chilkat.HttpResponse = http.QuickRequest("DELETE", urlHttp)
|
|
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return False
|
|
End If
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 200) Then
|
|
Console.WriteLine("✅ Benachrichtigung erfolgreich bestätigt.")
|
|
Return True
|
|
Else
|
|
Console.WriteLine("❌ Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return False
|
|
End If
|
|
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return False
|
|
End Function
|
|
|
|
Shared Function getENSNotifications() As List(Of HmrcNotification)
|
|
|
|
Try
|
|
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Falls eine Authentifizierung erforderlich ist, setzen Sie den API-Schlüssel oder andere Authentifizierungsheader
|
|
http.SetRequestHeader("Authorization", "Bearer " & TOKEN.token_BEARER_TOKEN)
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Definieren Sie die URL für die GET-Anfrage
|
|
Dim urlHttpReq As String = url & "/customs/imports/notifications/"
|
|
|
|
' Senden Sie die GET-Anfrage und erhalten Sie die Antwort
|
|
Dim response As Chilkat.HttpResponse = http.QuickRequest("GET", urlHttpReq)
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return Nothing
|
|
End If
|
|
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 204) Then
|
|
|
|
Console.WriteLine("Ergebnis: Kein Inhalt!")
|
|
Console.WriteLine(response.BodyStr)
|
|
Return Nothing
|
|
|
|
End If
|
|
If (response.StatusCode <> 200) Then
|
|
Console.WriteLine("Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return Nothing
|
|
End If
|
|
|
|
' Verarbeiten Sie den Antworttext (XML)
|
|
Dim xmlResponse As String = response.BodyStr
|
|
Console.WriteLine("Antwort erhalten:")
|
|
Console.WriteLine(xmlResponse)
|
|
Dim NotificationList As List(Of HmrcNotification) = ParseHmrcXmlResponse(xmlResponse)
|
|
|
|
|
|
Return NotificationList
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return Nothing
|
|
End Function
|
|
|
|
Public Shared Function ParseHmrcXmlResponse(xmlResponse As String) As List(Of HmrcNotification)
|
|
Dim notifications As New List(Of HmrcNotification)
|
|
|
|
Try
|
|
' XML in ein XElement-Objekt laden
|
|
Dim xml As XElement = XElement.Parse(xmlResponse)
|
|
|
|
' Alle <response>-Elemente durchlaufen
|
|
For Each response As XElement In xml.Elements("response")
|
|
Dim notification As New HmrcNotification With {
|
|
.CorrelationId = response.Element("correlationId")?.Value,
|
|
.NotificationId = response.Element("notificationId")?.Value,
|
|
.Link = response.Element("link")?.Value
|
|
}
|
|
notifications.Add(notification)
|
|
Next
|
|
Catch ex As Exception
|
|
Console.WriteLine("Fehler beim Parsen der XML-Antwort: " & ex.Message)
|
|
End Try
|
|
|
|
Return notifications
|
|
End Function
|
|
|
|
|
|
Public Shared Function ParseHmrcXmlResponseOutcomes(xmlResponse As String) As List(Of HmrcOutcomes)
|
|
Dim outcomes As New List(Of HmrcOutcomes)
|
|
|
|
Try
|
|
' XML in ein XElement-Objekt laden
|
|
Dim xml As XElement = XElement.Parse(xmlResponse)
|
|
|
|
' Alle <response>-Elemente durchlaufen
|
|
For Each response As XElement In xml.Elements("response")
|
|
Dim notification As New HmrcOutcomes With {
|
|
.CorrelationId = response.Element("correlationId")?.Value,
|
|
.MRN = response.Element("MRN")?.Value,
|
|
.Link = response.Element("link")?.Value
|
|
}
|
|
outcomes.Add(notification)
|
|
Next
|
|
Catch ex As Exception
|
|
Console.WriteLine("Fehler beim Parsen der XML-Antwort: " & ex.Message)
|
|
End Try
|
|
|
|
Return outcomes
|
|
End Function
|
|
|
|
|
|
|
|
Shared Function acknowlageENSNotification(notificationID) As Boolean
|
|
|
|
Try
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Authentifizierung: Setzen des Bearer-Tokens
|
|
http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Setzen des Content-Type-Headers für die Anfrage
|
|
http.SetRequestHeader("Content-Type", "application/xml")
|
|
|
|
' Definieren Sie die URL für die POST-Anfrage
|
|
Dim urlHttp As String = url & "/customs/imports/notifications/" & notificationID & ""
|
|
' Senden Sie die POST-Anfrage ohne Body
|
|
Dim response As Chilkat.HttpResponse = http.QuickRequest("DELETE", urlHttp)
|
|
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return False
|
|
End If
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 204) Then
|
|
Console.WriteLine("✅ Benachrichtigung erfolgreich bestätigt.")
|
|
Return True
|
|
Else
|
|
Console.WriteLine("❌ Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return False
|
|
End If
|
|
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return False
|
|
End Function
|
|
|
|
|
|
Shared Function readENSNotification(notificationID) As CC315AType
|
|
|
|
Try
|
|
|
|
Dim CREDENTIALS = cHMRC.getCredentials(ApplicationName)
|
|
Dim url As String = CREDENTIALS.API_STRING ' URL Setzenen https://api.service.hmrc.gov.uk / https://test-api.service.hmrc.gov.uk
|
|
|
|
|
|
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
|
|
|
|
|
|
|
|
Dim TOKEN = cHMRC.getTOKEN("ENS")
|
|
|
|
If TOKEN.hasEntry Then
|
|
|
|
|
|
' Erstellen Sie eine Instanz des Http-Objekts
|
|
Dim http As New Chilkat.Http()
|
|
|
|
' Authentifizierung: Setzen des Bearer-Tokens
|
|
http.AuthToken = TOKEN.token_BEARER_TOKEN
|
|
|
|
' Setzen des Accept-Headers für die erwartete Antwort im XML-Format
|
|
http.SetRequestHeader("Accept", "application/vnd.hmrc.1.0+xml")
|
|
|
|
' Definieren Sie die URL für die GET-Anfrage
|
|
|
|
Dim urlHttp As String = url & "/customs/imports/notifications/" & notificationID & ""
|
|
|
|
' Senden Sie die GET-Anfrage
|
|
Dim response As Chilkat.HttpResponse = http.QuickRequest("GET", urlHttp)
|
|
|
|
If (http.LastMethodSuccess = False) Then
|
|
Console.WriteLine("❌ Fehler bei der Anfrage: " & http.LastErrorText)
|
|
Return Nothing
|
|
End If
|
|
|
|
' Überprüfen Sie den HTTP-Statuscode der Antwort
|
|
If (response.StatusCode = 200) Then
|
|
Console.WriteLine("✅ Benachrichtigung erfolgreich abgerufen:")
|
|
Console.WriteLine(response.BodyStr) ' XML-Ausgabe
|
|
|
|
Dim tempFilePath As String = Path.GetTempFileName()
|
|
File.WriteAllText(tempFilePath, response.BodyStr)
|
|
|
|
Dim ENS_CC315A = CC315AType.LoadFromFile(tempFilePath)
|
|
Try
|
|
File.Delete(tempFilePath) ' Bereinigen nach der Verwendung
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
|
|
|
|
Return ENS_CC315A
|
|
|
|
Else
|
|
Console.WriteLine("❌ Fehler: HTTP Statuscode " & response.StatusCode)
|
|
Console.WriteLine(response.BodyStr)
|
|
Return Nothing
|
|
End If
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
End Try
|
|
Return Nothing
|
|
End Function
|
|
|
|
|
|
' Klasse zur Speicherung einer einzelnen Notification
|
|
Public Class HmrcNotification
|
|
Public Property CorrelationId As String
|
|
Public Property NotificationId As String
|
|
Public Property Link As String
|
|
End Class
|
|
|
|
|
|
' Klasse zur Speicherung einer einzelnen Notification
|
|
Public Class HmrcOutcomes
|
|
Public Property CorrelationId As String
|
|
Public Property MRN As String
|
|
Public Property Link As String
|
|
End Class
|
|
|
|
End Class
|