×

微店商品详情接口:私域字段适配与生产级异常自愈方案

Ace Ace 发表于2026-08-18 16:35:25 浏览8 评论0

抢沙发发表评论

微店作为私域电商核心平台,其商品详情接口与主流公域电商接口差异显著。全网多数教程仅实现基础数据拉取,忽略微店独有特性:价格以分为单位、分销佣金字段动态缺失、图文详情分层嵌套、短时效令牌频繁过期、下架商品返回残缺数据。本文摒弃基础调用演示,聚焦私域业务适配+数据矫正+异常自愈,适配店铺搬家、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限制较低,批量采集需增设请求间隔。同时下架商品不会直接报错,仅清空核心字段,代码通过在售状态过滤无效数据,保障业务数据纯净度。

群贤毕至

访客