Sample code for 30+ languages & platforms
PureBasic

hacienda.go.cr Recepción de comprobantes electrónicos y respuestas del receptor.

See more hacienda.go.cr Examples

Comprobantes Electrónicos API version v1 -- Recepción de comprobantes electrónicos y respuestas del receptor.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpResponse.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    ; Implements the following CURL command:

    ; curl -X POST -H "Content-Type: application / json" \
    ;   -H 'authorization: Bearer {access_token}' \
    ;   -d '{
    ;   "clave": "50601011600310112345600100010100000000011999999999",
    ;   "fecha": "2016-01-01T00:00:00-0600",
    ;   "emisor": {
    ;     "tipoIdentificacion": "02",
    ;     "numeroIdentificacion": "003101123456"
    ;   },
    ;   "receptor": {
    ;     "tipoIdentificacion": "02",
    ;     "numeroIdentificacion": "003101123456"
    ;   },
    ;   "comprobanteXml": "PD94..."
    ; }' https://api.comprobanteselectronicos.go.cr/recepcion/v1/recepcion

    ; Use the following online tool to generate HTTP code from a CURL command
    ; Convert a cURL Command to HTTP Source Code

    ; Use this online tool to generate code from sample JSON:
    ; Generate Code to Create JSON

    ; The following JSON is sent in the request body.

    ; {
    ;   "clave": "50601011600310112345600100010100000000011999999999",
    ;   "fecha": "2016-01-01T00:00:00-0600",
    ;   "emisor": {
    ;     "tipoIdentificacion": "02",
    ;     "numeroIdentificacion": "003101123456"
    ;   },
    ;   "receptor": {
    ;     "tipoIdentificacion": "02",
    ;     "numeroIdentificacion": "003101123456"
    ;   },
    ;   "comprobanteXml": "PD94b..."
    ; }

    ; Load the previously signed XML.
    bdSignedXml.i = CkBinData::ckCreate()
    If bdSignedXml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkBinData::ckLoadFile(bdSignedXml,"someDir/signed.xml")
    If success = 0
        Debug "Failed to load the XAdES signed XML."
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bdSignedXml)
        ProcedureReturn
    EndIf

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

    CkJsonObject::ckUpdateString(json,"clave","50601011600310112345600100010100000000011999999999")
    CkJsonObject::ckUpdateString(json,"fecha","2016-01-01T00:00:00-0600")
    CkJsonObject::ckUpdateString(json,"emisor.tipoIdentificacion","02")
    CkJsonObject::ckUpdateString(json,"emisor.numeroIdentificacion","003101123456")
    CkJsonObject::ckUpdateString(json,"receptor.tipoIdentificacion","02")
    CkJsonObject::ckUpdateString(json,"receptor.numeroIdentificacion","003101123456")
    ; Add the base64 encoded representation of the signed XML.
    CkJsonObject::ckUpdateString(json,"comprobanteXml",CkBinData::ckGetEncoded(bdSignedXml,"base64"))

    ; Load our previously obtained OAuth2 access token.
    jsonToken.i = CkJsonObject::ckCreate()
    If jsonToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/hacienda_cr.json")
    If success <> 1
        Debug "Failed to load constantContact.json"
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bdSignedXml)
        CkJsonObject::ckDispose(json)
        CkJsonObject::ckDispose(jsonToken)
        ProcedureReturn
    EndIf

    ; Adds the "Authorization: Bearer {access_token}" header.
    CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"access_token"))

    CkHttp::ckSetRequestHeader(http,"Content-Type","application / json")

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

    success = CkHttp::ckHttpJson(http,"POST","https://api.comprobanteselectronicos.go.cr/recepcion/v1/recepcion",json,"application/json",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(bdSignedXml)
        CkJsonObject::ckDispose(json)
        CkJsonObject::ckDispose(jsonToken)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    ; A 201 status code indicates success.
    Debug "Response status code: " + Str(CkHttpResponse::ckStatusCode(resp))

    Debug "Response body:"
    Debug CkHttpResponse::ckBodyStr(resp)


    CkHttp::ckDispose(http)
    CkBinData::ckDispose(bdSignedXml)
    CkJsonObject::ckDispose(json)
    CkJsonObject::ckDispose(jsonToken)
    CkHttpResponse::ckDispose(resp)


    ProcedureReturn
EndProcedure