Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.0.0+

eBay -- Upload Bulk Data using FileTransferService

See more eBay Examples

Demonstrates how to upload your data file using the eBay File Transfer API.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

-- Use a previously obtained access token.  The token should look something like this:
-- "AgAAAA**AQA ..."
local accessToken = "EBAY_ACCESS_TOKEN"

local http = chilkat.Http.new()

local apiCall = "uploadFile"
local fileAttachmentUuid = "<urn:uuid:bb47b86a237311e793ae92361f002671>"
local xmlUuid = "<urn:uuid:bb47b766237311e793ae92361f002671>"

local req = chilkat.HttpRequest.new()

req.http_verb = "POST"
req.path = "/FileTransferService"

local sbContentType = chilkat.StringBuilder.new()
sbContentType:append("multipart/related; type=\"application/xop+xml\"; start=\"XMLUUID\"; start-info=\"text/xml\"")
local replaceCount = sbContentType:replace("XMLUUID", xmlUuid)
req.content_type = sbContentType:get_as_string()

req:add_header("X-EBAY-SOA-SERVICE-NAME", "FileTransferService")
req:add_header("X-EBAY-SOA-OPERATION-NAME", apiCall)
req:add_header("X-EBAY-SOA-SECURITY-TOKEN", accessToken)
req:add_header("X-EBAY-SOA-REQUEST-DATA-FORMAT", "XML")
req:add_header("X-EBAY-SOA-RESPONSE-DATA-FORMAT", "XML")
req:add_header("User-Agent", "AnythingYouWant")

local pathToFileOnDisk1 = "qa_data/ebay/uploadFileRequest.xml"
local success = req:add_file_for_upload("uploadFileRequest.xml", pathToFileOnDisk1)
if not success then
    print(req.last_error_text)
    return
end

local pathToFileOnDisk2 = "qa_data/ebay/BulkDataExchangeRequests.gz"
success = req:add_file_for_upload("BulkDataExchangeRequests.gz", pathToFileOnDisk2)
if not success then
    print(req.last_error_text)
    return
end

-- Add sub-headers for each file in the request.
req:add_sub_header(0, "Content-Type", "application/xop+xml; charset=UTF-8; type=\"text/xml\"")
req:add_sub_header(0, "Content-Transfer-Encoding", "binary")
req:add_sub_header(0, "Content-ID", xmlUuid)
req:add_sub_header(1, "Content-Type", "application/octet-stream")
req:add_sub_header(1, "Content-Transfer-Encoding", "binary")
req:add_sub_header(1, "Content-ID", fileAttachmentUuid)

local resp = chilkat.HttpResponse.new()
success = http:http_sreq("storage.sandbox.ebay.com", 443, true, req, resp)
if not success then
    print(http.last_error_text)
    return
end

print("Response status code = " .. resp.status_code)

local xml = chilkat.Xml.new()
xml:load_xml(resp.body_str)

if resp.status_code ~= 200 then
    print(xml:get_xml())
    print("Failed.")
    return
end

-- We still may have a failure.  The XML needs to be checked.
-- A failed response might look like this:

--     <?xml version="1.0" encoding="UTF-8" ?>
--     <uploadFileResponse xmlns="http://www.ebay.com/marketplace/services">
--         <ack>Failure</ack>
--         <errorMessage>
--             <error>
--                 <errorId>1</errorId>
--                 <domain>Marketplace</domain>
--                 <severity>Error</severity>
--                 <category>Application</category>
--                 <message>Task Reference Id is invalid</message>
--                 <subdomain>FileTransfer</subdomain>
--             </error>
--         </errorMessage>
--         <version>1.1.0</version>
--         <timestamp>2017-04-18T01:05:27.475Z</timestamp>
--     </uploadFileResponse>

-- A successful response looks like this:

--     <?xml version="1.0" encoding="UTF-8" ?>
--     <uploadFileResponse xmlns="http://www.ebay.com/marketplace/services">
--         <ack>Success</ack>
--         <version>1.1.0</version>
--         <timestamp>2017-04-18T01:22:47.853Z</timestamp>
--     </uploadFileResponse>

print(xml:get_xml())

-- Get the "ack" to see if it's "Failure" or "Success"
if xml:child_content_matches("ack", "Success", false) then
    print("Success.")
else
    print("Failure.")
end