eBay Feed API uploadFile 调用返回 2003 错误 - PHP Curl

问题描述 投票:0回答:3

我想实现以下目标。将我的文件交换应用程序迁移到新的 eBay feed api。

请查看关注页面。

API - Feed 参考:

文件交换迁移过程链接

链接至 eBay Sell Feed API

我正在采用上述链接中所述的程序,但在调用 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,然后传入调用。

ebay-api ebay-lms
3个回答
1
投票
    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
        }
    }

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>


0
投票

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")
© www.soinside.com 2019 - 2024. All rights reserved.