Sample code for 30+ languages & platforms
PureBasic

HMRC Validate Fraud Prevention Headers

See more HTTP Misc Examples

Demonstrates how to test (validate) HMRC fraud prevention headers.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckConnect(rest,"test-api.service.hmrc.gov.uk",443,1,1)
    If success = 0
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    ; Load the previously fetched access token.
    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(json,"qa_data/tokens/hmrc.json")
    accessToken.s = CkJsonObject::ckStringOf(json,"access_token")
    Debug "Using access toke: " + accessToken

    sbAuthHeaderValue.i = CkStringBuilder::ckCreate()
    If sbAuthHeaderValue.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckAppend(sbAuthHeaderValue,"Bearer ")
    CkStringBuilder::ckAppend(sbAuthHeaderValue,accessToken)

    CkRest::ckAddHeader(rest,"Accept","application/vnd.hmrc.1.0+json")
    CkRest::ckAddHeader(rest,"Authorization",CkStringBuilder::ckGetAsString(sbAuthHeaderValue))

    ; Add the fraud prevention headers.
    ; See https://developer.service.hmrc.gov.uk/api-documentation/docs/fraud-prevention
    CkRest::ckAddHeader(rest,"gov-client-connection-method","DESKTOP_APP_DIRECT")

    ; This should be generated by an application and persistently stored on the device. The identifier should not expire.
    CkRest::ckAddHeader(rest,"gov-client-device-id","beec798b-b366-47fa-b1f8-92cede14a1ce")

    ; See https://developer.service.hmrc.gov.uk/api-documentation/docs/fraud-prevention
    CkRest::ckAddHeader(rest,"gov-client-user-ids","os=user123")

    ; Your local IP addresses (comma separated), such as addresses beginning with "192.168." or "172.16."
    CkRest::ckAddHeader(rest,"gov-client-local-ips","172.16.16.23")
    ; You'll need to find a way to get your MAC address.  Chilkat does not yet provide this ability...
    CkRest::ckAddHeader(rest,"gov-client-mac-addresses","7C%3AD3%3A0A%3A25%3ADA%3A1C")

    CkRest::ckAddHeader(rest,"gov-client-timezone","UTC+00:00")

    ; You can probably just hard-code these so they're always the same with each request.
    CkRest::ckAddHeader(rest,"gov-client-window-size","width=1256&height=800")
    CkRest::ckAddHeader(rest,"gov-client-screens","width=1920&height=1080&scaling-factor=1&colour-depth=16")
    CkRest::ckAddHeader(rest,"gov-client-user-agent","Windows/Server%202012 (Dell%20Inc./OptiPlex%20980)")
    CkRest::ckAddHeader(rest,"gov-vendor-version","My%20Desktop%20Software=1.2.3.build4286")

    responseStr.s = CkRest::ckFullRequestNoBody(rest,"GET","/test/fraud-prevention-headers/validate")
    If CkRest::ckLastMethodSuccess(rest) = 0
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbAuthHeaderValue)
        ProcedureReturn
    EndIf

    ; If the status code is 200, then the fraud prevention headers were validated.
    ; The JSON response may include some warnings..
    Debug "Response status code = " + Str(CkRest::ckResponseStatusCode(rest))
    Debug "Response JSON body: "
    Debug responseStr


    CkRest::ckDispose(rest)
    CkJsonObject::ckDispose(json)
    CkStringBuilder::ckDispose(sbAuthHeaderValue)


    ProcedureReturn
EndProcedure