neu
This commit is contained in:
167
Aviso/CHMRC.vb
Normal file
167
Aviso/CHMRC.vb
Normal file
@@ -0,0 +1,167 @@
|
||||
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
|
||||
Reference in New Issue
Block a user