Tcl
Tcl
eBay -- Upload Bulk Data using FileTransferService
See more eBay Examples
Demonstrates how to upload your data file using the eBay File Transfer API.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# 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 ..."
set accessToken "EBAY_ACCESS_TOKEN"
set http [new_CkHttp]
set apiCall "uploadFile"
set fileAttachmentUuid "<urn:uuid:bb47b86a237311e793ae92361f002671>"
set xmlUuid "<urn:uuid:bb47b766237311e793ae92361f002671>"
set req [new_CkHttpRequest]
CkHttpRequest_put_HttpVerb $req "POST"
CkHttpRequest_put_Path $req "/FileTransferService"
set sbContentType [new_CkStringBuilder]
CkStringBuilder_Append $sbContentType "multipart/related; type=\"application/xop+xml\"; start=\"XMLUUID\"; start-info=\"text/xml\""
set replaceCount [CkStringBuilder_Replace $sbContentType "XMLUUID" $xmlUuid]
CkHttpRequest_put_ContentType $req [CkStringBuilder_getAsString $sbContentType]
CkHttpRequest_AddHeader $req "X-EBAY-SOA-SERVICE-NAME" "FileTransferService"
CkHttpRequest_AddHeader $req "X-EBAY-SOA-OPERATION-NAME" $apiCall
CkHttpRequest_AddHeader $req "X-EBAY-SOA-SECURITY-TOKEN" $accessToken
CkHttpRequest_AddHeader $req "X-EBAY-SOA-REQUEST-DATA-FORMAT" "XML"
CkHttpRequest_AddHeader $req "X-EBAY-SOA-RESPONSE-DATA-FORMAT" "XML"
CkHttpRequest_AddHeader $req "User-Agent" "AnythingYouWant"
set pathToFileOnDisk1 "qa_data/ebay/uploadFileRequest.xml"
set success [CkHttpRequest_AddFileForUpload $req "uploadFileRequest.xml" $pathToFileOnDisk1]
if {$success == 0} then {
puts [CkHttpRequest_lastErrorText $req]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbContentType
exit
}
set pathToFileOnDisk2 "qa_data/ebay/BulkDataExchangeRequests.gz"
set success [CkHttpRequest_AddFileForUpload $req "BulkDataExchangeRequests.gz" $pathToFileOnDisk2]
if {$success == 0} then {
puts [CkHttpRequest_lastErrorText $req]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbContentType
exit
}
# Add sub-headers for each file in the request.
CkHttpRequest_AddSubHeader $req 0 "Content-Type" "application/xop+xml; charset=UTF-8; type=\"text/xml\""
CkHttpRequest_AddSubHeader $req 0 "Content-Transfer-Encoding" "binary"
CkHttpRequest_AddSubHeader $req 0 "Content-ID" $xmlUuid
CkHttpRequest_AddSubHeader $req 1 "Content-Type" "application/octet-stream"
CkHttpRequest_AddSubHeader $req 1 "Content-Transfer-Encoding" "binary"
CkHttpRequest_AddSubHeader $req 1 "Content-ID" $fileAttachmentUuid
set resp [new_CkHttpResponse]
set success [CkHttp_HttpSReq $http "storage.sandbox.ebay.com" 443 1 $req $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbContentType
delete_CkHttpResponse $resp
exit
}
puts "Response status code = [CkHttpResponse_get_StatusCode $resp]"
set xml [new_CkXml]
CkXml_LoadXml $xml [CkHttpResponse_bodyStr $resp]
if {[CkHttpResponse_get_StatusCode $resp] != 200} then {
puts [CkXml_getXml $xml]
puts "Failed."
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbContentType
delete_CkHttpResponse $resp
delete_CkXml $xml
exit
}
# 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>
puts [CkXml_getXml $xml]
# Get the "ack" to see if it's "Failure" or "Success"
if {D]CkXml_ChildContentMatches $xml "ack" "Success" 0[/L} then {
puts "Success."
} else {
puts "Failure."
}
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkStringBuilder $sbContentType
delete_CkHttpResponse $resp
delete_CkXml $xml