✅ 小规模调用1688基础API(商品搜索、详情、订单、物流)对个人/中小企业完全免费,不收接口调用费、不扣套餐点数。
⚠️ 只有以下情况会产生费用:购买更高QPS的资源包、调用增值接口(实时库存高级版/跨境洞察/数据推送)、超量按量计费(极少触发)。
一、1688 API费用实测结论(2026版)
场景 | 是否收费 | 说明 |
|---|---|---|
商品搜索 alibaba.offer.search | ✅ 免费 | 默认QPS≈10 |
商品详情 alibaba.item.get | ✅ 免费 | 可传fields控制返回 |
订单列表/详情 alibaba.trade.buyer.list | ✅ 免费 | 需申请权限+AccessToken |
物流轨迹 alibaba.logistics.trace.get | ✅ 免费 | — |
实时可售库存(高级) | ⚠️ 资源包 | 基础库存免费,高级实时需包 |
跨境选品洞察/数据推送 | ⚠️ 增值包 | 大卖家用 |
调用次数本身 | ✅ 不计费 | 只受QPS+日量风控限制 |
📌 实测:一家中型贸易公司做每日商品同步(~5000次/天)+ 订单回写(~200次/天),连续运行一年零扣费。
二、"隐性成本"其实是QPS限制 → 用限速避免触发购买压力
免费应用默认 QPS 较低(搜索≈10/s,订单≈20/s)。超频会返回
ISP_FLOW_CONTROL_LIMIT,不扣钱但直接失败。解决办法是客户端主动限速。附:令牌桶限速 + 成本零的调用封装
# ali1688_cost_free_client.py
import hashlib
import time
import requests
import urllib.parse
from typing import Dict, List, Optional
# 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
# ────────────────────────────────────────────
# 令牌桶:控制QPS在免费上限内(留余量设8)
# ────────────────────────────────────────────
class TokenBucket:
def __init__(self, rate: float = 8.0, capacity: int = None):
self.rate = rate
self.capacity = capacity or int(rate)
self.tokens = float(self.capacity)
self.last = time.monotonic()
def consume(self):
now = time.monotonic()
self.tokens = min(self.capacity, self.tokens + (now - self.last) * self.rate)
self.last = now
if self.tokens >= 1:
self.tokens -= 1
return
need = 1 - self.tokens
time.sleep(need / self.rate + 0.01)
self.tokens = 0
class Ali1688CostFreeClient:
"""
1688 免费API客户端(含QPS限速 + 限流重试)
完全无调用费,适合小规模/中等规模ERP对接
"""
GATEWAY_SEARCH = "https://gw.open.1688.com/openapi/param2/2/alibaba.offer.search/2.0"
GATEWAY_COMMON = "https://gw.open.1688.com/openapi/http/2/1"
def __init__(self, app_key: str, app_secret: str,
access_token: str = None, qps: float = 8.0):
self.app_key = app_key
self.app_secret = app_secret
self.access_token = access_token
self.bucket = TokenBucket(rate=qps)
# ─────────── 签名 ───────────
def _sign(self, params: Dict) -> str:
filtered = sorted((k, v) for k, v in params.items()
if v is not None and str(v).strip() != '')
qs = ''.join(f"{k}{v}" for k, v in filtered)
raw = f"{self.app_secret}{qs}{self.app_secret}"
return hashlib.md5(raw.encode('utf-8')).hexdigest().upper()
def _call(self, url: str, method: str, biz: Dict) -> Dict:
self.bucket.consume() # ← 主动限速,保免费
api_params = {
"method": method,
"app_key": self.app_key,
"timestamp": str(int(time.time() * 1000)),
"format": "json",
"v": "2.0",
"sign_method": "md5",
}
if self.access_token:
api_params["session"] = self.access_token
api_params["param2" if "param2" in url or method == "alibaba.offer.search"
else "param"] = urllib.parse.quote_plus(
str(biz).replace("'", '"')
)
api_params["sign"] = self._sign(api_params)
for attempt in range(3):
resp = requests.get(url, params=api_params, timeout=15)
resp.raise_for_status()
data = resp.json()
if "error_response" in data:
err_code = str(data["error_response"].get("code", ""))
# 限流 → 指数退避
if "FLOW_CONTROL" in err_code or err_code == "429":
if attempt < 2:
wait = 2 ** attempt
print(f"⚠️ 触发限流,{wait}s后重试(第{attempt+1}次)...")
time.sleep(wait)
continue
err = data["error_response"]
raise Exception(f"1688 Err[{err.get('code')}]: {err.get('msg')}")
result_key = [k for k in data if k != "error_response"][0]
return data[result_key]
raise Exception("持续被限流,请降低QPS或购买资源包")
# ─────────── 商品搜索 ───────────
def search(self, keyword: str, page_no: int = 1,
page_size: int = 40, price_min=None, price_max=None) -> Dict:
biz = {
"keywords": keyword,
"pageNo": page_no,
"pageSize": min(page_size, 50),
"sortType": "booked"
}
if price_min is not None:
biz["beginPrice"] = str(int(price_min * 100))
if price_max is not None:
biz["endPrice"] = str(int(price_max * 100))
return self._call(self.GATEWAY_SEARCH, "alibaba.offer.search", biz)
# ─────────── 商品详情 ───────────
def get_detail(self, offer_id: str, fields: str = None) -> Dict:
biz = {"item_id": offer_id}
if fields:
biz["fields"] = fields
res = self._call(self.GATEWAY_COMMON, "alibaba.item.get", biz)
return res.get("alibaba_item_get_response", {}).get("item", {})
# 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
# =========================================================
# 使用示例
# =========================================================
if __name__ == "__main__":
client = Ali1688CostFreeClient(
app_key="YOUR_APP_KEY",
app_secret="YOUR_APP_SECRET",
qps=8 # 免费安全值
)
try:
result = client.search("不锈钢保温杯", page_no=1, price_min=15, price_max=50)
offers = result.get("offers", [])
total = result.get("totalResult", 0)
print(f"✅ 找到 {total} 条,本页 {len(offers)} 条(零费用)")
if offers:
detail = client.get_detail(
str(offers[0].get("offerId")),
fields="title,price,sku_list,pics"
)
print(f"商品: {detail.get('title')} | ¥{detail.get('price')}")
except Exception as e:
print(f"❌ {e}")三、5个省钱/控费技巧(生产推荐)
技巧 | 效果 |
|---|---|
① 字段过滤 fields | 只取 title,price,sku_list,pics,响应体积↓60%,不易触发限流 |
② 令牌桶 QPS≤8 | 留余量低于免费上限10,基本不断流也不需买包 |
③ 本地缓存热门商品 | Redis缓存热销SKU 30min,日调用量可从5万降到5千 |
④ 错峰全量同步 | 每日全量商品同步放凌晨2~4点,避免业务高峰争QPS |
⑤ 先不买包,监控控制台用量 | 开放平台「统计分析」可看日调用量,确认瓶颈再买对应QPS包 |
四、什么时候才需要付费资源包?
- 商品搜索 QPS 持续需求 >20~50/s(中型平台级选品引擎)
- 需实时可售库存(非页面展示价)做精准超卖防控
- 用跨境增值洞察/竞品分析API
→ 此时买「基础资源包」(通常¥980~2980/年)即可提QPS并开高级接口,调用费依然免除。
五、一句话总结(面试题)
1688基础API(商品/订单/物流)调用本身免费,企业小规模使用零成本;唯一"隐形成本"是QPS限制,客户端用令牌桶限速+字段过滤即可稳定运行不需付费。付费仅发生在需要更高QPS或高级增值接口时购买资源包。
需要我补 OAuth2获取AccessToken 或 每日增量同步APScheduler脚本(带限速) 直接给你用吗?