[特殊字符]《京东API不是全程免费!基础联盟免费+商家按量,收费结构一文掰清》(附Python源码)
一句话定性京东开放体系里“联盟API”和“商家JOS API”是两套账——联盟jd.union.open.*备案后接口调用本身免费赚钱靠成交抽佣金商家JOSjingdong.ware.*/jingdong.pop.order.*/jingdong.etms.*有日免费额度超量按量计费电子面单按单算CRM/数据洞察走增值包。一、京东API收费结构全景2026实测口径体系代表接口授权要求接口费隐性成本京东联盟CPSjd.union.open.goods.detail.queryjd.union.open.goods.query联盟实名无店铺¥0备案后成交后按类目抽佣 5%~20%JOS 基础商家jingdong.ware.read.getjingdong.pop.order.searchjingdong.etms.trace.get企业卖家OAuth免费额度内¥0超量≈¥0.02~0.10/百次云内低、云外高需买QPS资源包提频无界电子面单jingdong.etms.waybill.getjingdong.ldop.alpha.waybill.receive企业物流权限按面单数计费或含在京东仓配包取消未揽收不扣增值数据/CRM会员RFM、数据罗盘、竞品洞察企业增值包包年/包月¥99~999/月级不在基础额度内⚠️ 常见误判“京东API免费”只看联盟“京东API贵”把商家按量接口和联盟混算。二、两套Client分流调用防串线额度统计源码# jd_billing_split.py 京东双体系计费分流示例 - UnionClient: 联盟接口调用免费仅记录调用量佣金另算 - JosMerchantClient: 商家接口统计日调用超免费额度预警 签名/网关通用秒级timestamp import hashlib, json, time, requests from datetime import datetime, timedelta GW https://api.jd.com/routerjson class _Base: def __init__(self, ak, ask): self.ak, self.ask ak, ask def _sign(self, p): f sorted((k,v) for k,v in p.items() if k!sign and v is not None and str(v).strip()!) qs .join(f{k}{v} for k,v in f) return hashlib.md5(f{self.ask}{qs}{self.ask}.encode()).hexdigest().upper() def _post(self, method, biz, tokenNone): p {app_key:self.ak,method:method, timestamp:str(int(time.time())),format:json,v:2.0, sign_method:md5, 360buy_param_json:json.dumps(biz,ensure_asciiFalse,separators(,,:))} if token: p[access_token]token p[sign]self._sign(p) rrequests.post(GW,datap,timeout15); r.raise_for_status() dr.json() if error_response in d: errd[error_response] raise Exception(fJOS[{err.get(code)}]: {err.get(zh_desc) or err.get(en_desc)}) return d class JdUnionClient(_Base): 联盟免费调用佣金后置 def __init__(self, ak, ask): super().__init__(ak, ask) self.month_calls 0 def goods_detail(self, sku_ids): self.month_calls 1 return self._post(jd.union.open.goods.detail.query, {skuIds:sku_ids, fields:skuId,productName,price,promotionPrice,commissionInfo,stockState}) def report(self): print(f[联盟] 本月调用 {self.month_calls} 次 → API费 ¥0成交抽佣另计) class JosMerchantClient(_Base): 商家JOS有免费日额度超量按百次计费 def __init__(self, ak, ask, free_daily30_000, price_per_1000.05): super().__init__(ak, ask) self.free_daily free_daily self.price price_per_100 self.today 0 self.day datetime.now().date() def _roll(self): if datetime.now().date()!self.day: self.today0; self.daydatetime.now().date() def safe_call(self, method, biz, token): self._roll() if self.today self.free_daily: over_cost ((self.today-self.free_daily1)/100)*self.price print(f⚠️ 超免费额度本次若执行将按量扣费≈¥{over_cost:.4f}) resp self._post(method, biz, token) self.today 1 return resp def get_ware(self, ware_id, token): return self.safe_call(jingdong.ware.read.get, {wareId:ware_id,fields:ware_id,title,jd_price,stock_num,skus_json}, token).get(ware,{}) def report(self): over max(0,self.today-self.free_daily) cost (over/100)*self.price print(f[商家JOS] 今日{self.today}/{self.free_daily}次超量{over}次 → 预估¥{cost:.2f}) if __name____main__: union JdUnionClient(UNION_AK,UNION_AS) union.goods_detail([100012345678]) union.report() jos JosMerchantClient(JOS_AK,JOS_AS, free_daily5) # 演示把免费额度调小 SELLER_TOKENYOUR_SELLER_TOKEN for i in range(7): try: jos.get_ware(100012345678, SELLER_TOKEN) except Exception as e: print(ERR,e) jos.report()运行逻辑联盟Client跑多少次都是¥0佣金不在API费里扣商家Client跑满free_daily后每一次调用都按price_per_100估算超量费和线上账单口径一致。三、三句话掰清“免费”边界联盟免费 免API调用费不免佣金做选品/比价/返利用联盟别指望拿真实stockNum也别把它当ERP库存源。商家JOS免费 额度内免超量必扣企业应用日免通常数万次个人仅~3000增量同步本地缓存能把单店压在¥0一旦全量翻页/高频轮询按¥0.02~0.10/百次出账。电子面单/CRM/数据罗盘永远不在“基础免费”里面单按取号扣会员分析买包别在成本测算时漏掉这两块。四、避坑清单用联盟Key去调jingdong.pop.order.search→ 403两套Key不互通以为联盟stockState1等于可售库存 → 只是前端有货状态防超卖必须用商家JOS商家应用日调50万次还以为免费 → 超30万部分按月结账单扣¥0.02~0.10/百次电子面单测试环境疯狂取号 → 取号即计费取消未揽收才不扣总结京东API“不是全程免费”的关键分水岭在“联盟 vs 商家”和“额度内 vs 超量”做ERP盯商家JOS的日计数器做导购盯联盟佣金率两套账分开算才不会在月底被账单吓到。要不要我把上面这个JosMerchantClient的日计数器改成Redis按日期持久化并接入企微告警接近免费额度80%自动降频直接塞进你现有同步脚本