50000+企业的共同选择
点三全渠道全链路ERP
400 8080 092
编辑:原创 时间:2025-09-17 16:17:49
对于在B站开设店铺的商家而言,通过API将ERP/WMS系统与平台库存数据打通,是避免缺货超卖的核心手段。B站提供的电商API接口涵盖店铺管理、商品管理、库存管理等全链路功能,支持商家将库存数据精准同步至平台前端,实现“在售商品库存量实时展示-订单触发自动扣减-异常订单即时拦截”的闭环管理。下文将基于B站开放平台规范,详解电商系统集成B站库存API实现方案。
基于Python实现B站库存更新接口调用,分增量更新和全量覆盖两个场景,嵌入异常处理与错误码解决方案,确保接口调用的稳定性与可靠性。
场景一:增量更新商品库存(mode=1)
适用于高频变动场景(如直播带货过程中实时补货或减库存),通过调整库存偏移量实现动态同步。
import requests
import json
def update_stock_incremental(access_token, sku_id, offset):
"""
增量更新B站商品库存
:param access_token: 用户授权令牌
:param sku_id: 商品SKU ID
:param offset: 库存偏移量(正数增加,负数减少)
:return: 更新结果
"""
url = "https://member.bilibili.com/arcopen/fn/v2/market/stock/update"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
"x-bili-timestamp": str(int(time.time())), # 当前时间戳
"x-bili-signature-method": "HMAC-SHA256",
"x-bili-signature-version": "1.0"
}
payload = {
"mode": 1, # 增量更新模式
"modify_stock_list": [
{
"sku_id": sku_id,
"zp_entity_stock_offset": offset
}
]
}
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
response_data = response.json()
if response_data["code"] == 0:
if not response_data["data"]["failed_skus"]:
return {"status": "success", "message": "库存更新成功"}
else:
return {"status": "partial_failure", "failed_skus": response_data["data"]["failed_skus"]}
elif response_data["code"] == 4009:
# 处理权限不足错误:重新申请SHOP_STOCK_INFO权限
raise PermissionError("Scope权限不足,请重新申请SHOP_STOCK_INFO权限")
else:
raise Exception(f"更新失败,错误码:{response_data['code']},信息:{response_data['message']}")
except requests.exceptions.RequestException as e:
raise Exception(f"网络请求失败:{str(e)}")
except PermissionError as e:
# 实际应用中可在此处触发权限申请流程
raise e
# 使用示例:为SKU=1002884494增加15个库存
try:
result = update_stock_incremental(
access_token="YOUR_ACCESS_TOKEN",
sku_id=1002884494,
offset=15
)
print(result)
except Exception as e:
print(f"操作失败:{str(e)}")
场景二:全量覆盖库存(mode=2)
适用于每日库存盘点后的数据同步,需传入SKU当前实际库存总值,覆盖平台原有记录。
def update_stock_full(access_token, stock_list):
"""
全量更新B站商品库存
:param access_token: 用户授权令牌
:param stock_list: 库存列表,格式为[{"sku_id": int, "total_stock": int}, ...]
:return: 更新结果
"""
url = "https://member.bilibili.com/arcopen/fn/v2/market/stock/update"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
"x-bili-timestamp": str(int(time.time())),
"x-bili-signature-method": "HMAC-SHA256",
"x-bili-signature-version": "1.0"
}
# 转换库存列表为接口要求格式
modify_stock_list = [
{
"sku_id": item["sku_id"],
"zp_entity_stock_offset": item["total_stock"] # 全量模式下为实际库存总值
} for item in stock_list
]
payload = {
"mode": 2, # 全量更新模式
"modify_stock_list": modify_stock_list
}
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
response_data = response.json()
if response_data["code"] == 0 and not response_data["data"]["failed_skus"]:
return {"status": "success", "message": "全量库存更新成功"}
elif response_data["code"] == 4009:
raise PermissionError("Scope权限不足,请重新申请SHOP_STOCK_INFO权限")
else:
raise Exception(f"更新失败,错误码:{response_data['code']},信息:{response_data['message']}")
except requests.exceptions.RequestException as e:
raise Exception(f"网络请求失败:{str(e)}")
# 使用示例:全量更新SKU=1002884494(库存50)和SKU=1002884500(库存20)
try:
result = update_stock_full(
access_token="YOUR_ACCESS_TOKEN",
stock_list=[
{"sku_id": 1002884494, "total_stock": 50},
{"sku_id": 1002884500, "total_stock": 20}
]
)
print(result)
except Exception as e:
print(f"操作失败:{str(e)}")
关键注意事项
1. 权限管理:首次调用前需在B站开放平台申请SHOP_STOCK_INFO权限,授权流程需用户手动确认。
2. 库存精度:全量更新时需确保zp_entity_stock_offset为实际盘点库存值,避免因数据偏差导致超卖风险。
3. 失败处理:响应中failed_skus字段会返回更新失败的SKU详情,需针对性排查(如SKU不存在、库存值为负等)。
通过上述参数配置与代码实现,电商系统可高效完成与B站平台的库存同步,结合异常处理机制与权限管理流程,确保库存数据的准确性与一致性。想了解更多电商平台接口对接内容,可以咨询点三客服。
最新文章