168 lines
6.6 KiB
VB.net
168 lines
6.6 KiB
VB.net
Public Class CHMRC
|
|
|
|
Shared Sub hmrcTEST()
|
|
Debug.WriteLine("HMRC Start")
|
|
Dim oauth2 As Chilkat.OAuth2 = New Chilkat.OAuth2()
|
|
Dim success As Boolean
|
|
oauth2.ListenPort = 3017
|
|
oauth2.AuthorizationEndpoint = "https://test-api.service.hmrc.gov.uk/oauth/authorize"
|
|
oauth2.TokenEndpoint = "https://test-api.service.hmrc.gov.uk/oauth/token"
|
|
oauth2.ClientId = "xybTOMaQWcuifeW5xnGggojlACWC"
|
|
oauth2.ClientSecret = "bf1cfb6e-1bcb-4282-b7a0-3d3ccb2b1dc1"
|
|
oauth2.Scope = "read:vat write:vat"
|
|
Dim url As String = oauth2.StartAuth()
|
|
|
|
If oauth2.LastMethodSuccess <> True Then
|
|
Debug.WriteLine(oauth2.LastErrorText)
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim http As Chilkat.Http = New Chilkat.Http()
|
|
|
|
System.Diagnostics.Process.Start(url)
|
|
|
|
|
|
Dim numMsWaited As Integer = 0
|
|
|
|
|
|
While (numMsWaited < 120000) AndAlso (oauth2.AuthFlowState < 3)
|
|
oauth2.SleepMs(100)
|
|
numMsWaited = numMsWaited + 100
|
|
End While
|
|
' If there was no response from the browser within 30 seconds, then
|
|
' the AuthFlowState will be equal to 1 Or 2.
|
|
' 1: Waiting for Redirect. The OAuth2 background thread Is waiting to receive the redirect HTTP request from the browser.
|
|
' 2: Waiting for Final Response. The OAuth2 background thread Is waiting for the final access token response.
|
|
' In that case, cancel the background task started in the call to StartAuth.
|
|
|
|
If oauth2.AuthFlowState < 3 Then
|
|
oauth2.Cancel()
|
|
Debug.WriteLine("No response from the browser!")
|
|
Exit Sub
|
|
End If
|
|
|
|
Debug.WriteLine("HMRC here")
|
|
|
|
|
|
' Check the AuthFlowState to see if authorization was granted, denied, Or if some error occurred
|
|
' The possible AuthFlowState values are:
|
|
' 3 Completed with Success. The OAuth2 flow has completed, the background thread exited, And the successful JSON response Is available in AccessTokenResponse property.
|
|
' 4: Completed with Access Denied. The OAuth2 flow has completed, the background thread exited, And the error JSON Is available in AccessTokenResponse property.
|
|
' 5: Failed Prior To Completion. The OAuth2 flow failed To complete, the background thread exited, And the error information Is available in the FailureInfo property.
|
|
|
|
If oauth2.AuthFlowState = 5 Then
|
|
Debug.WriteLine("OAuth2 failed to complete.")
|
|
Debug.WriteLine(oauth2.FailureInfo)
|
|
Exit Sub
|
|
End If
|
|
|
|
If oauth2.AuthFlowState = 4 Then
|
|
Debug.WriteLine("OAuth2 authorization was denied.")
|
|
Debug.WriteLine(oauth2.AccessTokenResponse)
|
|
Exit Sub
|
|
End If
|
|
|
|
If oauth2.AuthFlowState <> 3 Then
|
|
Debug.WriteLine("Unexpected AuthFlowState:" & Convert.ToString(oauth2.AuthFlowState))
|
|
Exit Sub
|
|
End If
|
|
|
|
Debug.WriteLine("OAuth2 authorization granted!")
|
|
Debug.WriteLine("Access Token = " & oauth2.AccessToken)
|
|
Dim json As Chilkat.JsonObject = New Chilkat.JsonObject()
|
|
json.Load(oauth2.AccessTokenResponse)
|
|
json.EmitCompact = False
|
|
Debug.WriteLine(json.Emit())
|
|
|
|
|
|
' The JSON response looks Like this
|
|
|
|
' {
|
|
' "token_type": "Bearer",
|
|
' "scope": "user_impersonation",
|
|
' "expires_in": "3599",
|
|
' "ext_expires_in": "0",
|
|
' "expires_on": "1524783438",
|
|
' "not_before": "1524779538",
|
|
' "resource": "https://mydomain.api.crm.dynamics.com",
|
|
' "access_token": "...",
|
|
' "refresh_token": "...",
|
|
' "id_token": "..."
|
|
' }
|
|
|
|
' If an "expires_on" member does Not exist, then add the JSON member by
|
|
' getting the current system date/time And adding the "expires_in" seconds.
|
|
' This way we'll know when the token expires.
|
|
|
|
If json.HasMember("expires_on") <> True Then
|
|
Dim dtExpire As Chilkat.CkDateTime = New Chilkat.CkDateTime()
|
|
dtExpire.SetFromCurrentSystemTime()
|
|
dtExpire.AddSeconds(json.IntOf("expires_in"))
|
|
json.AppendString("expires_on", dtExpire.GetAsUnixTimeStr(False))
|
|
End If
|
|
|
|
Debug.WriteLine(json.Emit())
|
|
Dim fac As Chilkat.FileAccess = New Chilkat.FileAccess()
|
|
fac.WriteEntireTextFile("qa_data/tokens/hmrc.json", json.Emit(), "utf-8", False)
|
|
|
|
|
|
End Sub
|
|
|
|
Shared Sub VATTEST(hmrc_app_server_token)
|
|
|
|
Dim rest As New Chilkat.Rest
|
|
Dim success As Boolean
|
|
|
|
' URL: https://test-api.service.hmrc.gov.uk/organisations/vat/123456789/returns
|
|
Dim bTls As Boolean = True
|
|
Dim port As Integer = 443
|
|
Dim bAutoReconnect As Boolean = True
|
|
success = rest.Connect("test-api.service.hmrc.gov.uk", port, bTls, bAutoReconnect)
|
|
If (success <> True) Then
|
|
Debug.WriteLine("ConnectFailReason: " & rest.ConnectFailReason)
|
|
Debug.WriteLine(rest.LastErrorText)
|
|
Exit Sub
|
|
End If
|
|
|
|
|
|
' See the Online Tool for Generating JSON Creation Code
|
|
Dim json As New Chilkat.JsonObject
|
|
json.UpdateString("periodKey", "#001")
|
|
json.UpdateNumber("vatDueSales", "100.00")
|
|
json.UpdateNumber("vatDueAcquisitions", "100.00")
|
|
json.UpdateNumber("totalVatDue", "200")
|
|
json.UpdateNumber("vatReclaimedCurrPeriod", "100.00")
|
|
json.UpdateNumber("netVatDue", "100")
|
|
json.UpdateNumber("totalValueSalesExVAT", "500")
|
|
json.UpdateNumber("totalValuePurchasesExVAT", "500")
|
|
json.UpdateNumber("totalValueGoodsSuppliedExVAT", "500")
|
|
json.UpdateNumber("totalAcquisitionsExVAT", "500")
|
|
json.UpdateBool("finalised", True)
|
|
|
|
rest.AddHeader("Content-Type", "application/json")
|
|
rest.AddHeader("Authorization", "Bearer " & hmrc_app_server_token)
|
|
rest.AddHeader("Accept", "application/vnd.hmrc.1.0+json")
|
|
|
|
Dim sbRequestBody As New Chilkat.StringBuilder
|
|
json.EmitSb(sbRequestBody)
|
|
Dim sbResponseBody As New Chilkat.StringBuilder
|
|
success = rest.FullRequestSb("POST", "/organisations/vat/123456789/returns", sbRequestBody, sbResponseBody)
|
|
If (success <> True) Then
|
|
Debug.WriteLine(rest.LastErrorText)
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim respStatusCode As Integer = rest.ResponseStatusCode
|
|
If (respStatusCode >= 400) Then
|
|
Debug.WriteLine("Response Status Code = " & respStatusCode)
|
|
Debug.WriteLine("Response Header:")
|
|
Debug.WriteLine(rest.ResponseHeader)
|
|
Debug.WriteLine("Response Body:")
|
|
Debug.WriteLine(sbResponseBody.GetAsString())
|
|
Exit Sub
|
|
End If
|
|
|
|
|
|
End Sub
|
|
End Class
|