Objective-C
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
#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.");
}