Sample code for 30+ languages & platforms
Delphi ActiveX

eBay -- Upload Bulk Data using FileTransferService

See more eBay Examples

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

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
accessToken: WideString;
http: TChilkatHttp;
apiCall: WideString;
fileAttachmentUuid: WideString;
xmlUuid: WideString;
req: TChilkatHttpRequest;
sbContentType: TChilkatStringBuilder;
replaceCount: Integer;
pathToFileOnDisk1: WideString;
pathToFileOnDisk2: WideString;
resp: TChilkatHttpResponse;
xml: TChilkatXml;

begin
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 ..."
accessToken := 'EBAY_ACCESS_TOKEN';

http := TChilkatHttp.Create(Self);

apiCall := 'uploadFile';
fileAttachmentUuid := '<urn:uuid:bb47b86a237311e793ae92361f002671>';
xmlUuid := '<urn:uuid:bb47b766237311e793ae92361f002671>';

req := TChilkatHttpRequest.Create(Self);

req.HttpVerb := 'POST';
req.Path := '/FileTransferService';

sbContentType := TChilkatStringBuilder.Create(Self);
sbContentType.Append('multipart/related; type="application/xop+xml"; start="XMLUUID"; start-info="text/xml"');
replaceCount := sbContentType.Replace('XMLUUID',xmlUuid);
req.ContentType := sbContentType.GetAsString();

req.AddHeader('X-EBAY-SOA-SERVICE-NAME','FileTransferService');
req.AddHeader('X-EBAY-SOA-OPERATION-NAME',apiCall);
req.AddHeader('X-EBAY-SOA-SECURITY-TOKEN',accessToken);
req.AddHeader('X-EBAY-SOA-REQUEST-DATA-FORMAT','XML');
req.AddHeader('X-EBAY-SOA-RESPONSE-DATA-FORMAT','XML');
req.AddHeader('User-Agent','AnythingYouWant');

pathToFileOnDisk1 := 'qa_data/ebay/uploadFileRequest.xml';
success := req.AddFileForUpload('uploadFileRequest.xml',pathToFileOnDisk1);
if (success = 0) then
  begin
    Memo1.Lines.Add(req.LastErrorText);
    Exit;
  end;

pathToFileOnDisk2 := 'qa_data/ebay/BulkDataExchangeRequests.gz';
success := req.AddFileForUpload('BulkDataExchangeRequests.gz',pathToFileOnDisk2);
if (success = 0) then
  begin
    Memo1.Lines.Add(req.LastErrorText);
    Exit;
  end;

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

resp := TChilkatHttpResponse.Create(Self);
success := http.HttpSReq('storage.sandbox.ebay.com',443,1,req.ControlInterface,resp.ControlInterface);
if (success = 0) then
  begin
    Memo1.Lines.Add(http.LastErrorText);
    Exit;
  end;

Memo1.Lines.Add('Response status code = ' + IntToStr(resp.StatusCode));

xml := TChilkatXml.Create(Self);
xml.LoadXml(resp.BodyStr);

if (resp.StatusCode <> 200) then
  begin
    Memo1.Lines.Add(xml.GetXml());
    Memo1.Lines.Add('Failed.');
    Exit;
  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>

Memo1.Lines.Add(xml.GetXml());

// Get the "ack" to see if it's "Failure" or "Success"
if (xml.ChildContentMatches('ack','Success',0)) then
  begin
    Memo1.Lines.Add('Success.');
  end
else
  begin
    Memo1.Lines.Add('Failure.');
  end;
end;