Lua Requires Chilkat v11.0.0+
Lua
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
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