使用Ebay API更新变体商品库存与价格的问题求助
eBay变体商品库存更新问题解决方案
一、bulkUpdatePriceQuantity接口报错原因及修正
bulkUpdatePriceQuantity属于Inventory API,支持变体商品,报错"SKU不存在"通常是以下原因:
- 子变体SKU未在eBay Inventory系统中创建独立的Inventory Item/Offer,或是SKU拼写错误
- 请求中的
offerId与对应子变体的Offer不匹配,需确保每个子变体的offerId是其自身的Offer ID(而非父商品的) - 子变体未正确关联到父商品的Inventory Item组
二、ReviseFixedPriceItem接口调用失败修正
该接口属于Trading API,支持批量更新变体库存,你的请求存在以下问题及修正方案:
1. JSON请求及C#代码修正
错误点:
- Authorization头格式错误:应为
Bearer {token}而非TOKEN {token} - URL缺少必要参数:需指定
callname、siteid、version - 请求体缺少API版本字段
修正后的C#代码:
using (var client = new HttpClient()) { // 修正认证头格式 client.DefaultRequestHeaders.Add("Authorization", "Bearer " + EBAY_TOKEN); client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8"); client.DefaultRequestHeaders.Add("X-EBAY-C-MARKETPLACE-ID", "EBAY_IT"); client.DefaultRequestHeaders.Add("Accept", "application/json"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 修正URL,添加必要参数(siteid=101对应意大利站点,version用最新版本) var url = $"https://api.ebay.com/ws/api.dll?callname=ReviseFixedPriceItem&siteid=101&version=1199"; // 修正请求体,添加Version字段 var requestBody = new { Version = "1199", RequesterCredentials = new { eBayAuthToken = EBAY_TOKEN }, Item = new { ItemID = "115809802256", Variations = new { Variation = new[] { new { SKU = "STALLION_0", Quantity = 4 } } } } }; string _jsonContent = JsonConvert.SerializeObject(requestBody); HttpContent _httpContent = new StringContent(_jsonContent, Encoding.UTF8, "application/json"); var response = client.PostAsync(url, _httpContent).Result; response.EnsureSuccessStatusCode(); var resp = response.Content.ReadAsStringAsync().Result; }
2. XML请求及C#代码修正
错误点:
- URL未指定
callname等接口参数,导致eBay未识别调用的接口 - 编码使用ASCII,会导致非ASCII字符乱码
- XML请求体缺少
RequesterCredentials认证节点 - 未添加必要请求头(如API版本、站点信息)
修正后的XML请求体:
<?xml version="1.0" encoding="UTF-8"?> <ReviseFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents"> <RequesterCredentials> <eBayAuthToken>你的eBay令牌</eBayAuthToken> </RequesterCredentials> <Version>1199</Version> <ErrorLanguage>it_IT</ErrorLanguage> <WarningLevel>Low</WarningLevel> <Item> <ItemID>115711360327</ItemID> <Variations> <Variation> <SKU>07000-129-M_39</SKU> <Quantity>0</Quantity> </Variation> <Variation> <SKU>07000-129-M_40</SKU> <Quantity>1</Quantity> </Variation> <!-- 其他变体省略 --> </Variations> </Item> </ReviseFixedPriceItemRequest>
修正后的C#代码:
var xml = "上面的XML内容"; var request = (HttpWebRequest)WebRequest.Create("https://api.ebay.com/ws/api.dll?callname=ReviseFixedPriceItem&siteid=101&version=1199"); // 修正编码为UTF8 byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xml); request.ContentType = "text/xml; charset=utf-8"; request.ContentLength = bytes.Length; request.Method = "POST"; // 添加必要请求头 request.Headers.Add("X-EBAY-API-VERSION", "1199"); request.Headers.Add("X-EBAY-API-SITEID", "101"); using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(bytes, 0, bytes.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == System.Net.HttpStatusCode.OK) { using (Stream responseStream = response.GetResponseStream()) { string responseStr = new StreamReader(responseStream).ReadToEnd(); return responseStr; } } return null; }
三、替代接口推荐
如果更倾向于使用Inventory API,可以选择:
- updateInventoryItem:单独更新单个变体的库存,只需指定子变体SKU和库存数量
- bulkUpdateInventoryItem:批量更新多个变体的库存,请求格式更简洁,无需关联Offer ID
内容的提问来源于stack exchange,提问作者Martina
相关产品推荐
相关产品推荐

