微店作为私域电商核心平台,其商品详情接口与主流公域电商接口差异显著。全网多数教程仅实现基础数据拉取,忽略微店独有特性:价格以分为单位、分销佣金字段动态缺失、图文详情分层嵌套、短时效令牌频繁过期、下架商品返回残缺数据。本文摒弃基础调用演示,聚焦私域业务适配+数据矫正+异常自愈,适配店铺搬家、ERP同步、私域选品等生产场景,提供高稳定性封装方案。 点击获取key和secret
微店开放平台详情接口无冗余字段,但存在大量场景化可选参数,批量同步时极易出现程序报错。核心难点集中在单位转换不统一、非在售商品字段缺失、鉴权令牌有效期短三大痛点,也是线上项目高频崩溃的核心原因。
一、生产级封装代码
代码内置令牌预刷新、价格自动换算、空字段兜底、脏数据过滤,适配长期批量同步任务:import requests
import time
class WeidianItemDetail:
def __init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.api_url = "https://open.weidian.com/api/v1/product/detail"
self.access_token = None
self.expire_time = 0
# 令牌预刷新,解决短时过期问题
def get_token(self):
if self.access_token and time.time() < self.expire_time - 100:
return self.access_token
res = requests.post("https://open.weidian.com/oauth2/token", data={
"app_key": self.app_key,
"app_secret": self.app_secret,
"grant_type": "client_credentials"
}, timeout=12)
data = res.json()
self.access_token = data.get("access_token")
self.expire_time = time.time() + data.get("expires_in", 7200)
return self.access_token
# 核心数据归一化矫正
def parse_detail(self, raw):
if raw.get("code") != 0:
return {"status": 0, "msg": raw.get("msg"), "data": None}
item = raw.get("data", {})
# 分转元,统一价格单位
price = round(item.get("price", 0) / 100, 2)
return {
"item_id": item.get("item_id"),
"title": item.get("title", "").strip(),
"price_yuan": price,
"original_price": round(item.get("origin_price", 0)/100, 2),
"stock": item.get("stock_num", 0),
"sales": item.get("sales_num", 0),
"commission": round(item.get("commission",0)/100,2),
"is_on_sale": item.get("status") == 1,
"main_images": item.get("images", []),
"detail_content": item.get("detail", "")
}
# 商品详情查询入口
def get_item_info(self, item_id):
headers = {"Authorization": f"Bearer {self.get_token()}"}
try:
resp = requests.get(f"{self.api_url}?item_id={item_id}", headers=headers, timeout=15)
return self.parse_detail(resp.json())
except Exception as e:
return {"status": 0, "msg": f"请求异常:{str(e)}", "data": None}
if __name__ == "__main__":
client = WeidianItemDetail("你的APP_KEY", "你的APP_SECRET")
print(client.get_item_info("微店商品ID"))
二、差异化核心优化点
1. 单位统一矫正:针对微店原生价格、佣金以分为单位的特性,自动转换为元,彻底规避业务统计价格倍率错误。
2. 令牌自愈机制:提前100秒预判令牌过期,批量任务全程无需重启,解决微店2小时短时鉴权失效问题。
3. 可选字段兼容:分销佣金、详情内容等非必返字段全部兜底,避免个别商品字段缺失导致程序中断。
三、线上落地避坑要点
微店接口严格绑定店铺授权,跨店铺查询会返回空数据,调用前需匹配授权店铺ID;接口QPS限制较低,批量采集需增设请求间隔。同时下架商品不会直接报错,仅清空核心字段,代码通过在售状态过滤无效数据,保障业务数据纯净度。