BigCommerce 在请求中“放置”多个项目的属性
本文关键字:项目 属性 放置 请求 BigCommerce | 更新日期: 2023-09-27 18:36:49
我正在使用BigCommerce API和我创建的REST服务,并且我已经能够使用每个产品的产品ID成功更新产品的数量。这是我如何做到这一点的一个例子:
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(username, api_key);
handler.Proxy = null;
handler.UseProxy = false;
HttpClient client = new HttpClient(handler);
client.BaseAddress = new Uri("MyStoresURL");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string productInventory = "My Product Inventory";
var setQty = new { inventory_level = productInventory };
string productID = "Product ID to be updated";
string url = string.Format("products/{0}", productID);
var response = client.PutAsJsonAsync(url, setQty).Result;
//StatusCode: 200 "OK"
问题是,对于 20,000 种产品,该过程可能需要数小时。我正在寻找一种一次或至少批量更新所有产品库存的方法。所有 BigCommerce 文档解释了如何更新单个产品或订单、客户等,但不是一次全部更新。
我觉得这很奇怪,因为您可以通过商店的门户网站手动上传包含所有产品的CSV文件,而BigCommerce将用它更新您的库存。我正在寻找一种自动执行此操作的方法。这是我尝试过的示例,它导致状态为 400"错误请求"。
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(username,
HttpClient client = new HttpClient(handler);
client.BaseAddress = new Uri("My Store");
handler.Proxy = null;
string url = string.Format("products.json?page={0}", counter);
HttpResponseMessage response = new HttpResponseMessage();
List<ProductQTY> productQty = new List<ProductQTY>();
response = client.GetAsync(url).Result;
//This returns a json string with the first 50 products
//and all their attributes including Quantity.
productQty = response.Content.ReadAsAsync<List<ProductQTY>>().Result;
//This converts the response into a list of 50 Products.
//Here I update the quantity of each product.
string json = Newtonsoft.Json.JsonConvert.SerializeObject(productQty);
//convert my product list back into json.
response = client.PutAsJsonAsync(url, json).Result;
//StatusCode: 400 "Bad Request"
前面的代码将进入一个循环,从每个页面下载 50 个产品。
我还尝试将我下载的 50 计数 json 字符串上传回同一个 url,但它永远不会起作用。
总之。这将使用以下HTTPClient
成功更新产品的库存:
string inventory = "10";
string bcID = "10001";
var setInv = new { inventory_level = inventory };
string url = string.Format("products/{0}", bcID);
var response = client.PutAsJsonAsync(url, setInv).Result;
那么有没有办法一次更新多个产品呢?
分享这个是因为有人可能有同样的问题。我知道我已经搜索了这些信息,但找不到它。
我直接从BigCommerce支持中得到了答案。我之前问过,但没有得到答案,因为我们没有使用他们的 API 支持包,但来自 BC 的一位乐于助人的人终于给了我答案。引用:
"目前无法通过API一次更新多个产品库存。它只能逐个产品完成。
他们确实提到他们正在努力在未来添加此功能。
所以就是这样。我会手动更新我的库存,或者看看等待时间是否可以接受。
它不是批处理,但是您可以通过一次更新多个(4,8等)项目来大大缩短时间。我自己正在研究使用 API,并遇到了这篇文章。 猜猜我会计划使用 ASYNC/AWAIT