Sample code for 30+ languages & platforms
Objective-C

eBay -- Upload Bulk Data using FileTransferService

See more eBay Examples

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

Chilkat Objective-C Downloads

Objective-C
#import <NSString.h>
#import <CkoHttp.h>
#import <CkoHttpRequest.h>
#import <CkoStringBuilder.h>
#import <CkoHttpResponse.h>
#import <CkoXml.h>

BOOL success = NO;

// 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 ..."
NSString *accessToken = @"EBAY_ACCESS_TOKEN";

CkoHttp *http = [[CkoHttp alloc] init];

NSString *apiCall = @"uploadFile";
NSString *fileAttachmentUuid = @"<urn:uuid:bb47b86a237311e793ae92361f002671>";
NSString *xmlUuid = @"<urn:uuid:bb47b766237311e793ae92361f002671>";

CkoHttpRequest *req = [[CkoHttpRequest alloc] init];

req.HttpVerb = @"POST";
req.Path = @"/FileTransferService";

CkoStringBuilder *sbContentType = [[CkoStringBuilder alloc] init];
[sbContentType Append: @"multipart/related; type=\"application/xop+xml\"; start=\"XMLUUID\"; start-info=\"text/xml\""];
int replaceCount = [[sbContentType Replace: @"XMLUUID" replacement: xmlUuid] intValue];
req.ContentType = [sbContentType GetAsString];

[req AddHeader: @"X-EBAY-SOA-SERVICE-NAME" value: @"FileTransferService"];
[req AddHeader: @"X-EBAY-SOA-OPERATION-NAME" value: apiCall];
[req AddHeader: @"X-EBAY-SOA-SECURITY-TOKEN" value: accessToken];
[req AddHeader: @"X-EBAY-SOA-REQUEST-DATA-FORMAT" value: @"XML"];
[req AddHeader: @"X-EBAY-SOA-RESPONSE-DATA-FORMAT" value: @"XML"];
[req AddHeader: @"User-Agent" value: @"AnythingYouWant"];

NSString *pathToFileOnDisk1 = @"qa_data/ebay/uploadFileRequest.xml";
success = [req AddFileForUpload: @"uploadFileRequest.xml" path: pathToFileOnDisk1];
if (success == NO) {
    NSLog(@"%@",req.LastErrorText);
    return;
}

NSString *pathToFileOnDisk2 = @"qa_data/ebay/BulkDataExchangeRequests.gz";
success = [req AddFileForUpload: @"BulkDataExchangeRequests.gz" path: pathToFileOnDisk2];
if (success == NO) {
    NSLog(@"%@",req.LastErrorText);
    return;
}

// Add sub-headers for each file in the request.
[req AddSubHeader: [NSNumber numberWithInt: 0] name: @"Content-Type" value: @"application/xop+xml; charset=UTF-8; type=\"text/xml\""];
[req AddSubHeader: [NSNumber numberWithInt: 0] name: @"Content-Transfer-Encoding" value: @"binary"];
[req AddSubHeader: [NSNumber numberWithInt: 0] name: @"Content-ID" value: xmlUuid];
[req AddSubHeader: [NSNumber numberWithInt: 1] name: @"Content-Type" value: @"application/octet-stream"];
[req AddSubHeader: [NSNumber numberWithInt: 1] name: @"Content-Transfer-Encoding" value: @"binary"];
[req AddSubHeader: [NSNumber numberWithInt: 1] name: @"Content-ID" value: fileAttachmentUuid];

CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpSReq: @"storage.sandbox.ebay.com" port: [NSNumber numberWithInt: 443] ssl: YES request: req response: resp];
if (success == NO) {
    NSLog(@"%@",http.LastErrorText);
    return;
}

NSLog(@"%@%d",@"Response status code = ",[resp.StatusCode intValue]);

CkoXml *xml = [[CkoXml alloc] init];
[xml LoadXml: resp.BodyStr];

if ([resp.StatusCode intValue] != 200) {
    NSLog(@"%@",[xml GetXml]);
    NSLog(@"%@",@"Failed.");
    return;
}

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

NSLog(@"%@",[xml GetXml]);

// Get the "ack" to see if it's "Failure" or "Success"
if ([xml ChildContentMatches: @"ack" pattern: @"Success" caseSensitive: NO]) {
    NSLog(@"%@",@"Success.");
}
else {
    NSLog(@"%@",@"Failure.");
}