Sample code for 30+ languages & platforms
Visual FoxPro

eBay -- Upload Bulk Data using FileTransferService

See more eBay Examples

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

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcAccessToken
LOCAL loHttp
LOCAL lcApiCall
LOCAL lcFileAttachmentUuid
LOCAL lcXmlUuid
LOCAL loReq
LOCAL loSbContentType
LOCAL lnReplaceCount
LOCAL lcPathToFileOnDisk1
LOCAL lcPathToFileOnDisk2
LOCAL loResp
LOCAL loXml

lnSuccess = 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 ..."
lcAccessToken = "EBAY_ACCESS_TOKEN"

loHttp = CreateObject('Chilkat.Http')

lcApiCall = "uploadFile"
lcFileAttachmentUuid = "<urn:uuid:bb47b86a237311e793ae92361f002671>"
lcXmlUuid = "<urn:uuid:bb47b766237311e793ae92361f002671>"

loReq = CreateObject('Chilkat.HttpRequest')

loReq.HttpVerb = "POST"
loReq.Path = "/FileTransferService"

loSbContentType = CreateObject('Chilkat.StringBuilder')
loSbContentType.Append('multipart/related; type="application/xop+xml"; start="XMLUUID"; start-info="text/xml"')
lnReplaceCount = loSbContentType.Replace("XMLUUID",lcXmlUuid)
loReq.ContentType = loSbContentType.GetAsString()

loReq.AddHeader("X-EBAY-SOA-SERVICE-NAME","FileTransferService")
loReq.AddHeader("X-EBAY-SOA-OPERATION-NAME",lcApiCall)
loReq.AddHeader("X-EBAY-SOA-SECURITY-TOKEN",lcAccessToken)
loReq.AddHeader("X-EBAY-SOA-REQUEST-DATA-FORMAT","XML")
loReq.AddHeader("X-EBAY-SOA-RESPONSE-DATA-FORMAT","XML")
loReq.AddHeader("User-Agent","AnythingYouWant")

lcPathToFileOnDisk1 = "qa_data/ebay/uploadFileRequest.xml"
lnSuccess = loReq.AddFileForUpload("uploadFileRequest.xml",lcPathToFileOnDisk1)
IF (lnSuccess = 0) THEN
    ? loReq.LastErrorText
    RELEASE loHttp
    RELEASE loReq
    RELEASE loSbContentType
    CANCEL
ENDIF

lcPathToFileOnDisk2 = "qa_data/ebay/BulkDataExchangeRequests.gz"
lnSuccess = loReq.AddFileForUpload("BulkDataExchangeRequests.gz",lcPathToFileOnDisk2)
IF (lnSuccess = 0) THEN
    ? loReq.LastErrorText
    RELEASE loHttp
    RELEASE loReq
    RELEASE loSbContentType
    CANCEL
ENDIF

* Add sub-headers for each file in the request.
loReq.AddSubHeader(0,"Content-Type",'application/xop+xml; charset=UTF-8; type="text/xml"')
loReq.AddSubHeader(0,"Content-Transfer-Encoding","binary")
loReq.AddSubHeader(0,"Content-ID",lcXmlUuid)
loReq.AddSubHeader(1,"Content-Type","application/octet-stream")
loReq.AddSubHeader(1,"Content-Transfer-Encoding","binary")
loReq.AddSubHeader(1,"Content-ID",lcFileAttachmentUuid)

loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpSReq("storage.sandbox.ebay.com",443,1,loReq,loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loReq
    RELEASE loSbContentType
    RELEASE loResp
    CANCEL
ENDIF

? "Response status code = " + STR(loResp.StatusCode)

loXml = CreateObject('Chilkat.Xml')
loXml.LoadXml(loResp.BodyStr)

IF (loResp.StatusCode <> 200) THEN
    ? loXml.GetXml()
    ? "Failed."
    RELEASE loHttp
    RELEASE loReq
    RELEASE loSbContentType
    RELEASE loResp
    RELEASE loXml
    CANCEL
ENDIF

* 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>

? loXml.GetXml()

* Get the "ack" to see if it's "Failure" or "Success"
IF (loXml.ChildContentMatches("ack","Success",0)) THEN
    ? "Success."
ELSE
    ? "Failure."
ENDIF

RELEASE loHttp
RELEASE loReq
RELEASE loSbContentType
RELEASE loResp
RELEASE loXml