Delphi ActiveX
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
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;