我想实现以下目标。将我的文件交换应用程序迁移到新的 eBay feed api。
请查看关注页面。
API - Feed 参考:
我正在采用上述链接中所述的程序,但在调用 Sell Feed API -> uploadFile 方法时收到以下错误。
"errorId": 2003,
"domain": "ACCESS",
"category": "APPLICATION",
"message": "Internal error",
"longMessage": "There was a problem with an eBay internal system or process. Contact eBay developer support for assistance",
"parameters": [
{ "name": "code", "value": "400" },
{ "name": "message", "value": "HTTP 400 Bad Request" }
请检查我的要求。
端点:“https://api.ebay.com/sell/feed/v1/task/task-40-xxxxxxxxx/upload_file”
请求标头:
Authorization:Bearer myToken
Accept:application/json
Content-Type:multipart/form-data
X-EBAY-C-MARKETPLACE-ID: EBAY_US
有效负载:
{
"fileName" : "https://virtualwebdesk.com/brad/feed.csv",
"name" : "file",
"type" : "form-data"
}
请注意:我是先创建TaskID,然后传入调用。
This code is in C# - RestClient
createTask
==========
var client = new RestClient("https://api.ebay.com/sell/feed/v1/task");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer v^1.1#i^1****** YOUR USER ACCESS TOKEN *********Ql3QYER3BQAAA==");
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-EBAY-C-MARKETPLACE-ID", "EBAY_GB");
var body = @"{
" + "\n" +
@" ""schemaVersion"": ""1149"",
" + "\n" +
@" ""feedType"": ""LMS_REVISE_INVENTORY_STATUS""
" + "\n" +
@"}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Response:
location:https://api.ebay.com/sell/feed/v1/task/task-12-1127376027
task-12-1127376027 is your TaskID
uploadFile
==========
test.xml
--------
<?xml version="1.0" encoding="utf-8" ?>
<BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
<Header>
<Version>685</Version>
<SiteID>3</SiteID>
</Header>
<ReviseInventoryStatusRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<ErrorLanguage>en_US</ErrorLanguage>
<WarningLevel>High</WarningLevel>
<MessageID>test-1111</MessageID>
<Version>637</Version>
<InventoryStatus ComplexType="InventoryStatusType">
<SKU>test-1111</SKU>
<Quantity>2</Quantity>
</InventoryStatus>
</ReviseInventoryStatusRequest>
<ReviseInventoryStatusRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<ErrorLanguage>en_US</ErrorLanguage>
<WarningLevel>High</WarningLevel>
<MessageID>test-2222</MessageID>
<Version>637</Version>
<InventoryStatus ComplexType="InventoryStatusType">
<SKU>test-2222</SKU>
<Quantity>0</Quantity>
</InventoryStatus>
</ReviseInventoryStatusRequest>
</BulkDataExchangeRequests>
var client = new RestClient("https://api.ebay.com/sell/feed/v1/task/task-12-1127376027/upload_file");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer v^1.1#i^1****** YOUR USER ACCESS TOKEN *********Ql3QYER3BQAAA==");
request.AddHeader("X-EBAY-C-MARKETPLACE-ID", "EBAY_GB");
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "multipart/form-data");
request.AddParameter("fileName", "test.xml");
request.AddFile("file", "F:/test.xml");
request.AddParameter("type", "form-data");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Response: "StatusCode: OK, Content-Type: , Content-Length: 0)"
getTask
========
var client = new RestClient("https://api.ebay.com/sell/feed/v1/task/task-12-1235290549");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer v^1.1#i^1****** YOUR USER ACCESS TOKEN *********Ql3QYER3BQAAA==");
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Response:
{
"taskId": "task-12-1127376027",
"status": "COMPLETED",
"feedType": "LMS_REVISE_INVENTORY_STATUS",
"creationDate": "2022-02-09T11:39:50.000Z",
"completionDate": "2022-02-09T11:50:34.000Z",
"uploadSummary": {
"successCount": 2,
"failureCount": 0
}
}
我明白了,
<InventoryStatus ComplexType="InventoryStatusType"> => <InventoryStatus>
<?xml version="1.0" encoding="utf-8" ?>
<BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
<Header>
<Version>685</Version>
<SiteID>0</SiteID>
</Header>
<ReviseInventoryStatusRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<InventoryStatus>
<ItemID>2645246754</ItemID>
<Quantity>2</Quantity>
<SKU>SY0195Y</SKU>
</InventoryStatus>
<ErrorLanguage>en_US</ErrorLanguage>
<MessageID>ttt33</MessageID>
<Version>637</Version>
<WarningLevel>High</WarningLevel>
</ReviseInventoryStatusRequest>
</BulkDataExchangeRequests>
https://www.reddit.com/r/learnpython/comments/s0y3dk/uploading_a_csv_using_ebay_feed_api_endpoints/
在这里找到解决方案,需要删除标头中的“Content-Type:multipart/form-data”,并将文件添加到请求中。
这是Python的示例代码。
def uploadFile(token, task_id, file_name, file_path):
url = "https://api.ebay.com/sell/feed/v1/task/"+task_id+"/upload_file"
headers = {
"Authorization": "Bearer " + token,
"X-EBAY-C-MARKETPLACE-ID": "EBAY_AU"
}
form_data = {
"name": "file",
"fileName": file_name,
"type": "form-data"
}
files = {
"file": (file_name, open(file_path, "rb"))
}
response = requests.post(url,headers=headers, data=form_data, files=files)
return response
uploadFile("myToken", "my_task_id", "my_file_name.csv", "C:/my_file_path")