Sample code for 30+ languages & platforms
PureBasic

Xero Get Invoices

See more Xero Examples

Get Xero company invoices.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.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.

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

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

    success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/xero-access-token.json")
    If success = 0
        Debug CkJsonObject::ckLastErrorText(jsonToken)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonToken)
        ProcedureReturn
    EndIf

    CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"access_token"))

    ; Replace the value here with an actual tenant ID obtained from this example:
    ; Get Xero Tenant IDs
    CkHttp::ckSetRequestHeader(http,"Xero-tenant-id","83299b9e-5747-4a14-a18a-a6c94f824eb7")

    CkHttp::setCkAccept(http, "application/json")

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

    success = CkHttp::ckHttpNoBody(http,"GET","https://api.xero.com/api.xro/2.0/Invoices",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonToken)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    Debug "Response Status Code: " + Str(CkHttpResponse::ckStatusCode(resp))

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

    CkJsonObject::ckLoad(jsonResponse,CkHttpResponse::ckBodyStr(resp))
    CkJsonObject::setCkEmitCompact(jsonResponse, 0)
    Debug CkJsonObject::ckEmit(jsonResponse)

    If CkHttpResponse::ckStatusCode(resp) <> 200
        Debug "Failed."
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonToken)
        CkHttpResponse::ckDispose(resp)
        CkJsonObject::ckDispose(jsonResponse)
        ProcedureReturn
    EndIf

    ; Sample output...
    ; (See the parsing code below..)
    ; 
    ; Use the this online tool to generate parsing code from sample JSON: 
    ; Generate Parsing Code from JSON

    ; {
    ;   "Id": "bda1f62f-0d63-4178-8d54-e91fd226987a",
    ;   "Status": "OK",
    ;   "ProviderName": "Chilkat2222",
    ;   "DateTimeUTC": "\/Date(1587210234493)\/",
    ;   "Invoices": [
    ;     {
    ;       "Type": "ACCPAY",
    ;       "InvoiceID": "0032f627-3156-4d30-9b1c-4d3b994dc921",
    ;       "InvoiceNumber": "9871",
    ;       "Reference": "",
    ;       "Payments": [
    ;         {
    ;           "PaymentID": "22974891-3689-4694-9ee7-fd2ba917af55",
    ;           "Date": "\/Date(1579737600000+0000)\/",
    ;           "Amount": 148.50,
    ;           "Reference": "Chq 409",
    ;           "HasAccount": false,
    ;           "HasValidationErrors": false
    ;         }
    ;       ],
    ;       "CreditNotes": [
    ;       ],
    ;       "Prepayments": [
    ;       ],
    ;       "Overpayments": [
    ;       ],
    ;       "AmountDue": 0.00,
    ;       "AmountPaid": 148.50,
    ;       "AmountCredited": 0.00,
    ;       "IsDiscounted": false,
    ;       "HasAttachments": false,
    ;       "HasErrors": false,
    ;       "Contact": {
    ;         "ContactID": "d6a384fb-f46f-41a3-8ac7-b7bc9e0b5efa",
    ;         "Name": "Melrose Parking",
    ;         "Addresses": [
    ;         ],
    ;         "Phones": [
    ;         ],
    ;         "ContactGroups": [
    ;         ],
    ;         "ContactPersons": [
    ;         ],
    ;         "HasValidationErrors": false
    ;       },
    ;       "DateString": "2020-01-15T00:00:00",
    ;       "Date": "\/Date(1579046400000+0000)\/",
    ;       "DueDateString": "2020-01-24T00:00:00",
    ;       "DueDate": "\/Date(1579824000000+0000)\/",
    ;       "Status": "PAID",
    ;       "LineAmountTypes": "Exclusive",
    ;       "LineItems": [
    ;       ],
    ;       "SubTotal": 135.00,
    ;       "TotalTax": 13.50,
    ;       "Total": 148.50,
    ;       "UpdatedDateUTC": "\/Date(1221560931500+0000)\/",
    ;       "CurrencyCode": "AUD",
    ;       "FullyPaidOnDate": "\/Date(1579737600000+0000)\/"
    ;     },
    ;     {
    ;       "Type": "ACCPAY",
    ;       "InvoiceID": "673dd7cc-beb7-4697-83d4-0c47cb400cc2",
    ;       "InvoiceNumber": "",
    ;       "Reference": "",
    ;       "Payments": [
    ;         {
    ;           "PaymentID": "4d06f609-5200-4364-9c8b-d4379a945252",
    ;           "Date": "\/Date(1580688000000+0000)\/",
    ;           "Amount": 974.60,
    ;           "Reference": "DD # 96013",
    ;           "HasAccount": false,
    ;           "HasValidationErrors": false
    ;         }
    ;       ],
    ;       "CreditNotes": [
    ;         {
    ;           "CreditNoteID": "7df8949c-b71f-40c0-bbcf-39f2f450f286",
    ;           "CreditNoteNumber": "03391",
    ;           "ID": "7df8949c-b71f-40c0-bbcf-39f2f450f286",
    ;           "HasErrors": false,
    ;           "AppliedAmount": 218.90,
    ;           "DateString": "2020-01-29T00:00:00",
    ;           "Date": "\/Date(1580256000000+0000)\/",
    ;           "LineItems": [
    ;           ],
    ;           "Total": 218.90
    ;         }
    ;       ],
    ;       "Prepayments": [
    ;       ],
    ;       "Overpayments": [
    ;       ],
    ;       "AmountDue": 0.00,
    ;       "AmountPaid": 974.60,
    ;       "AmountCredited": 218.90,
    ;       "IsDiscounted": false,
    ;       "HasAttachments": false,
    ;       "HasErrors": false,
    ;       "Contact": {
    ;         "ContactID": "d0cd2c4f-18a0-4f7c-a32a-2db00f29d298",
    ;         "Name": "PC Complete",
    ;         "Addresses": [
    ;         ],
    ;         "Phones": [
    ;         ],
    ;         "ContactGroups": [
    ;         ],
    ;         "ContactPersons": [
    ;         ],
    ;         "HasValidationErrors": false
    ;       },
    ;       "DateString": "2020-01-28T00:00:00",
    ;       "Date": "\/Date(1580169600000+0000)\/",
    ;       "DueDateString": "2020-02-04T00:00:00",
    ;       "DueDate": "\/Date(1580774400000+0000)\/",
    ;       "Status": "PAID",
    ;       "LineAmountTypes": "Exclusive",
    ;       "LineItems": [
    ;       ],
    ;       "SubTotal": 1085.00,
    ;       "TotalTax": 108.50,
    ;       "Total": 1193.50,
    ;       "UpdatedDateUTC": "\/Date(1221561913790+0000)\/",
    ;       "CurrencyCode": "AUD",
    ;       "FullyPaidOnDate": "\/Date(1580688000000+0000)\/"
    ;     },
    ;     {
    ;       "Type": "ACCPAY",
    ;       "InvoiceID": "c12aff7e-12bf-4185-8702-460929f19674",
    ;       "InvoiceNumber": "",
    ;       "Reference": "",
    ;       "Payments": [
    ;       ],
    ;       "CreditNotes": [
    ;       ],
    ;       "Prepayments": [
    ;       ],
    ;       "Overpayments": [
    ;       ],
    ;       "AmountDue": 2166.99,
    ;       "AmountPaid": 0.00,
    ;       "AmountCredited": 0.00,
    ;       "CurrencyRate": 1.000000,
    ;       "IsDiscounted": false,
    ;       "HasAttachments": false,
    ;       "HasErrors": false,
    ;       "Contact": {
    ;         "ContactID": "d0cd2c4f-18a0-4f7c-a32a-2db00f29d298",
    ;         "Name": "PC Complete",
    ;         "Addresses": [
    ;         ],
    ;         "Phones": [
    ;         ],
    ;         "ContactGroups": [
    ;         ],
    ;         "ContactPersons": [
    ;         ],
    ;         "HasValidationErrors": false
    ;       },
    ;       "DateString": "2020-04-10T00:00:00",
    ;       "Date": "\/Date(1586476800000+0000)\/",
    ;       "DueDateString": "2020-05-05T00:00:00",
    ;       "DueDate": "\/Date(1588636800000+0000)\/",
    ;       "Status": "AUTHORISED",
    ;       "LineAmountTypes": "Exclusive",
    ;       "LineItems": [
    ;       ],
    ;       "SubTotal": 1969.99,
    ;       "TotalTax": 197.00,
    ;       "Total": 2166.99,
    ;       "UpdatedDateUTC": "\/Date(1497965301980+0000)\/",
    ;       "CurrencyCode": "AUD"
    ;     }
    ;   ]
    ; }
    ; 

    Type.s
    InvoiceID.s
    InvoiceNumber.s
    Reference.s
    AmountDue.s
    AmountPaid.s
    AmountCredited.s
    IsDiscounted.i
    HasAttachments.i
    HasErrors.i
    ContactContactID.s
    ContactName.s
    ContactHasValidationErrors.i
    DateString.s
    Date.s
    DueDateString.s
    DueDate.s
    LineAmountTypes.s
    SubTotal.s
    TotalTax.s
    Total.s
    UpdatedDateUTC.s
    CurrencyCode.s
    FullyPaidOnDate.s
    CurrencyRate.s
    j.i
    count_j.i
    PaymentID.s
    Amount.s
    HasAccount.i
    HasValidationErrors.i
    CreditNoteID.s
    CreditNoteNumber.s
    ID.s
    AppliedAmount.s
    k.i
    count_k.i

    Id.s = CkJsonObject::ckStringOf(jsonResponse,"Id")
    Status.s = CkJsonObject::ckStringOf(jsonResponse,"Status")
    ProviderName.s = CkJsonObject::ckStringOf(jsonResponse,"ProviderName")
    DateTimeUTC.s = CkJsonObject::ckStringOf(jsonResponse,"DateTimeUTC")
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices")
    While i < count_i
        CkJsonObject::setCkI(jsonResponse, i)
        Type = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Type")
        InvoiceID = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].InvoiceID")
        InvoiceNumber = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].InvoiceNumber")
        Reference = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Reference")
        AmountDue = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].AmountDue")
        AmountPaid = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].AmountPaid")
        AmountCredited = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].AmountCredited")
        IsDiscounted = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].IsDiscounted")
        HasAttachments = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].HasAttachments")
        HasErrors = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].HasErrors")
        ContactContactID = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Contact.ContactID")
        ContactName = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Contact.Name")
        ContactHasValidationErrors = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].Contact.HasValidationErrors")
        DateString = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].DateString")
        Date = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Date")
        DueDateString = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].DueDateString")
        DueDate = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].DueDate")
        Status = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Status")
        LineAmountTypes = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].LineAmountTypes")
        SubTotal = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].SubTotal")
        TotalTax = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].TotalTax")
        Total = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Total")
        UpdatedDateUTC = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].UpdatedDateUTC")
        CurrencyCode = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CurrencyCode")
        FullyPaidOnDate = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].FullyPaidOnDate")
        CurrencyRate = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CurrencyRate")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Payments")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            PaymentID = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Payments[j].PaymentID")
            Date = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Payments[j].Date")
            Amount = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Payments[j].Amount")
            Reference = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].Payments[j].Reference")
            HasAccount = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].Payments[j].HasAccount")
            HasValidationErrors = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].Payments[j].HasValidationErrors")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].CreditNotes")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            CreditNoteID = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].CreditNoteID")
            CreditNoteNumber = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].CreditNoteNumber")
            ID = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].ID")
            HasErrors = CkJsonObject::ckBoolOf(jsonResponse,"Invoices[i].CreditNotes[j].HasErrors")
            AppliedAmount = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].AppliedAmount")
            DateString = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].DateString")
            Date = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].Date")
            Total = CkJsonObject::ckStringOf(jsonResponse,"Invoices[i].CreditNotes[j].Total")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].CreditNotes[j].LineItems")
            While k < count_k
                CkJsonObject::setCkK(jsonResponse, k)
                k = k + 1
            Wend
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Prepayments")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Overpayments")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Contact.Addresses")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Contact.Phones")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Contact.ContactGroups")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].Contact.ContactPersons")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jsonResponse,"Invoices[i].LineItems")
        While j < count_j
            CkJsonObject::setCkJ(jsonResponse, j)
            j = j + 1
        Wend
        i = i + 1
    Wend


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(jsonToken)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(jsonResponse)


    ProcedureReturn
EndProcedure