Sample code for 30+ languages & platforms
DataFlex

Xero Download Attachment for an Item (such as an Invoice)

See more Xero Examples

Demonstrates how to download a particular attachment for a particular Xero item.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Handle hoJsonToken
    String sUrl
    Variant vBd
    Handle hoBd
    String sTemp1
    Integer iTemp1

    Move False To iSuccess

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

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    Get Create (RefClass(cComChilkatJsonObject)) To hoJsonToken
    If (Not(IsComObjectCreated(hoJsonToken))) Begin
        Send CreateComObject of hoJsonToken
    End
    Get ComLoadFile Of hoJsonToken "qa_data/tokens/xero-access-token.json" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoJsonToken To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComStringOf Of hoJsonToken "access_token" To sTemp1
    Set ComAuthToken Of hoHttp To sTemp1

    // Replace the value here with an actual tenant ID obtained from this example:
    // Get Xero Tenant IDs
    Send ComSetRequestHeader To hoHttp "Xero-tenant-id" "83299b9e-5747-4a14-a18a-a6c94f824eb7"

    Set ComAccept Of hoHttp To "application/json"

    // The example to list Xero attachments shows how to get attachment information.
    // Here's a sample JSON response obtained form listing attachments:
    // Your application can get the AttachmentID's and filenames from it.

    // {
    //   "Id": "24bfbcb9-dec9-4d33-835c-8f165d776766",
    //   "Status": "OK",
    //   "ProviderName": "Chilkat2222",
    //   "DateTimeUTC": "\/Date(1587213296972)\/",
    //   "Attachments": [
    //     {
    //       "AttachmentID": "daf106e2-8634-4349-bfcc-86c1df0793b2",
    //       "FileName": "penguins.jpg",
    //       "Url": "https://api.xero.com/api.xro/2.0/Invoices/0032f627-3156-4d30-9b1c-4d3b994dc921/Attachments/penguins.jpg",
    //       "MimeType": "image/jpg",
    //       "ContentLength": 777835
    //     }
    //   ]
    // }

    Move "https://api.xero.com/api.xro/2.0/{$Endpoint}/{$Guid}/Attachments/{$AttachmentId}" To sUrl

    // Endpoint can be Invoices, Receipts, CreditNotes, PurchaseOrders, etc.
    Get ComSetUrlVar Of hoHttp "Endpoint" "Invoices" To iSuccess

    // Guid is the ID of the item, such as the InvoiceID.
    Get ComSetUrlVar Of hoHttp "Guid" "0032f627-3156-4d30-9b1c-4d3b994dc921" To iSuccess

    // AttachmentId is the ID of the particular attachment to be downloaded
    Get ComSetUrlVar Of hoHttp "AttachmentId" "daf106e2-8634-4349-bfcc-86c1df0793b2" To iSuccess

    // Download the attachment data into bd.
    Get Create (RefClass(cComChilkatBinData)) To hoBd
    If (Not(IsComObjectCreated(hoBd))) Begin
        Send CreateComObject of hoBd
    End
    Get pvComObject of hoBd to vBd
    Get ComQuickGetBd Of hoHttp sUrl vBd To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComLastStatus Of hoHttp To iTemp1
    Showln "Response Status Code: " iTemp1

    Get ComLastStatus Of hoHttp To iTemp1
    If (iTemp1 = 200) Begin
        // Success
        // Save to a file..
        Get ComWriteFile Of hoBd "qa_output/penguines.jpg" To iSuccess
    End
    Else Begin
        // Failed.  bd contains error information..
        Get ComGetString Of hoBd "utf-8" To sTemp1
        Showln sTemp1
    End



End_Procedure