【干货满满】分享微店API接口到手价,用python脚本实现

简介: 微店作为知名社交电商平台,其开放平台提供商品查询、订单管理等API接口。本文介绍如何通过微店API获取商品到手价(含优惠、券等),涵盖认证机制、Python实现及关键说明。

微店(Weidian)作为国内知名的社交电商平台,其开放平台提供了商品查询、订单管理等 API 接口。获取商品到手价(含店铺优惠、优惠券等)需调用商品详情接口,结合优惠信息计算最终价格。以下是基于微店开放平台 API 的实现方案。

一、核心接口与认证机制

1. 相关 API 接口

获取商品到手价主要依赖微店的商品详情接口:

  • weidian.item.get:获取商品基础信息、原价、促销活动、优惠券等,支持返回优惠后实际价格(需店铺授权)。

    2. 认证机制

    微店 API 采用 appkey + appsecret + 签名 的认证体系:
  • 开发者需在微店开发平台注册应用,获取appkeyappsecret
  • 所有请求需包含sign参数(通过appsecret对请求参数加密生成);
  • 店铺级接口需通过access_token(店铺授权令牌,有效期 2 小时)访问,需用户授权流程。

    二、Python 脚本实现

    以下脚本实现通过微店 API 获取商品到手价,包含签名生成、接口调用和价格解析逻辑。
    import requests
    import json
    import time
    import hashlib
    import logging
    from requests.exceptions import RequestException
    from typing import Dict, Optional

配置日志

logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)

class WeidianAPI:
def init(self, appkey: str, appsecret: str, access_token: Optional[str] = None):
"""
初始化微店API客户端
:param appkey: 应用appkey
:param appsecret: 应用appsecret
:param access_token: 店铺授权令牌(店铺级接口必需)
"""
self.appkey = appkey
self.appsecret = appsecret
self.access_token = access_token
self.base_url = "https://api.weidian.com" # 微店API网关
self.format = "json"
self.version = "1.0"

def _generate_sign(self, params: Dict[str, str]) -> str:
    """生成签名(微店API签名规则)"""
    # 1. 按参数名ASCII升序排序
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    # 2. 拼接为key=value&key=value格式
    sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
    # 3. 拼接appsecret并MD5加密
    sign_str += self.appsecret
    return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()

def call(self, method: str, params: Optional[Dict] = None) -> Optional[Dict]:
    """
    通用API调用方法
    :param method: 接口方法名(如weidian.item.get)
    :param params: 接口参数
    :return: 接口返回的业务数据
    """
    # 1. 构建公共参数
    common_params = {
        "appkey": self.appkey,
        "method": method,
        "timestamp": str(int(time.time())),  # 秒级时间戳
        "format": self.format,
        "version": self.version
    }
    if self.access_token:
        common_params["access_token"] = self.access_token

    # 2. 合并参数
    all_params = {**common_params,** (params or {})}

    # 3. 生成签名
    sign = self._generate_sign(all_params)
    all_params["sign"] = sign

    # 4. 发送请求(微店API支持GET/POST,推荐POST)
    try:
        response = requests.post(
            self.base_url,
            data=all_params,
            headers={"Content-Type": "application/x-www-form-urlencoded"},
            timeout=15
        )
        response.raise_for_status()

        # 5. 解析响应
        result = response.json()
        logging.info(f"API调用成功:{method},响应:{json.dumps(result, ensure_ascii=False)[:200]}...")

        # 6. 处理错误(微店API错误码在errno字段,0为成功)
        if result.get("errno") != 0:
            logging.error(f"业务错误:{result.get('errmsg')}(错误码:{result.get('errno')})")
            return None

        return result.get("data", {})

    except RequestException as e:
        logging.error(f"请求异常:{str(e)},接口:{method}")
        return None
    except json.JSONDecodeError:
        logging.error(f"响应格式错误:{response.text[:200]}...,接口:{method}")
        return None

def get_item_final_price(self, item_id: str) -> Optional[Dict]:
    """
    获取商品到手价(包含店铺优惠、优惠券等)
    :param item_id: 商品ID(微店商品唯一标识)
    :return: 价格信息字典(含原价、到手价、优惠信息等)
    """
    method = "weidian.item.get"
    params = {
        "item_id": item_id,
        "fields": "item_id,title,price,final_price,promotion_info,coupon_info,stock"
    }

    # 调用接口
    result = self.call(method, params)
    if not result:
        return None

    # 解析价格信息
    # final_price为优惠后到手价(单位:分,需转换为元)
    final_price = result.get("final_price") / 100 if result.get("final_price") else None
    original_price = result.get("price") / 100 if result.get("price") else None

    # 解析优惠信息
    promotion_info = result.get("promotion_info", {})  # 促销活动(如满减)
    coupon_info = result.get("coupon_info", [])  # 优惠券列表

    return {
        "item_id": item_id,
        "title": result.get("title"),  # 商品标题
        "original_price": original_price,  # 原价(元)
        "final_price": final_price,  # 到手价(元)
        "promotion": promotion_info.get("desc") or "无促销",  # 促销描述
        "coupons": [
            {
                "denomination": c.get("denomination") / 100,  # 优惠券金额(分→元)
                "min_charge": c.get("min_charge") / 100,  # 使用门槛(分→元)
                "valid_time": f"{c.get('start_time')}至{c.get('end_time')}"  # 有效期
            } for c in coupon_info
        ],
        "stock": result.get("stock"),  # 库存数量
        "main_image": result.get("main_img")  # 商品主图
    }

示例调用

if name == "main":

# 替换为你的实际参数(从微店开放平台获取)
APPKEY = "your_appkey"
APPSECRET = "your_appsecret"
ACCESS_TOKEN = "your_access_token"  # 店铺授权令牌(必需)

# 初始化客户端
weidian_api = WeidianAPI(appkey=APPKEY, appsecret=APPSECRET, access_token=ACCESS_TOKEN)

# 获取商品到手价(替换为实际商品ID)
item_id = "12345678"  # 示例商品ID
price_info = weidian_api.get_item_final_price(item_id)

if price_info:
    print(f"商品标题:{price_info['title']}")
    print(f"原价:{price_info['original_price']:.2f} 元")
    print(f"到手价:{price_info['final_price']:.2f} 元")
    print(f"促销活动:{price_info['promotion']}")
    print(f"库存:{price_info['stock']}件")
    print("可用优惠券:")
    for coupon in price_info["coupons"]:
        print(f"- 满{coupon['min_charge']}元减{coupon['denomination']}元 "
              f"(有效期:{coupon['valid_time']})")

关键说明

  1. 接口与参数解析
    核心接口:weidian.item.get是获取商品详情的核心接口,需指定fields参数明确返回字段(如final_price为到手价);
    item_id:商品唯一标识,可从微店商品页 URL 提取;
    access_token:店铺授权令牌,通过 OAuth 2.0 流程获取(需店铺主授权),用于访问店铺私有数据。
  2. 价格单位与计算
    微店 API 返回的价格单位为 “分”,需转换为 “元”(除以 100):
    price:商品原价(分);
    final_price:优惠后到手价(分),已包含店铺折扣、优惠券、满减等所有优惠;
    优惠券金额(denomination)和门槛(min_charge)同样以 “分” 为单位。
  3. 签名规则
    微店 API 签名生成步骤:
    收集所有请求参数(含公共参数和业务参数);
    按参数名 ASCII 码升序排序;
    拼接为key=value&key=value格式;
    末尾拼接appsecret,通过 MD5 加密并转为大写,即为sign参数。
  4. 权限与限流
    权限申请:weidian.item.get接口需申请 “商品管理” 权限,个人开发者需完成实名认证;
    限流策略:默认 QPS 为 5,超限返回429错误,建议添加请求间隔(如 1 秒 / 次)。
    扩展建议
    批量查询:通过weidian.item.batchget接口批量获取多个商品价格(需传入item_ids列表);
    优惠详情:解析promotion_info字段,展示 “第二件半价”“满 300 减 50” 等促销规则;
    库存监控:结合final_price和stock字段,实现低价商品库存预警功能。
    通过上述脚本,可实现微店商品到手价的精准获取,适用于社交电商比价工具、导购小程序、店铺运营分析系统等场景。实际使用时需参考微店开放平台文档调整参数和字段。
相关文章
|
5天前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
6天前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
7天前
|
缓存 监控 供应链
唯品会自定义 API 自定义操作深度分析及 Python 实现
唯品会开放平台提供丰富API,支持商品查询、订单管理、促销活动等电商全流程操作。基于OAuth 2.0认证机制,具备安全稳定的特点。通过组合调用基础接口,可实现数据聚合、流程自动化、监控预警及跨平台集成,广泛应用于供应链管理、数据分析和智能采购等领域。结合Python实现方案,可高效完成商品搜索、订单分析、库存监控等功能,提升电商运营效率。
|
7天前
|
数据采集 JSON API
微店商品列表API接口开发指南:从零到实战
微店商品列表API(vdian.shop.item.list.get)用于获取店铺商品数据,支持分页、签名认证,返回JSON格式。适用于商品同步、竞品分析、多平台展示及数据清洗。提供Python请求示例,便于快速接入。
|
7天前
|
JSON 数据挖掘 API
微店商品详情API接口开发指南:从零到实战
微店商品详情API(micro.item_get)用于获取商品名称、价格、库存等信息,支持HTTP GET/POST请求,返回JSON格式数据,适用于电商开发、店铺管理与数据分析。提供Python请求示例,便于快速集成调用,适用于多店铺管理、跨平台展示及价格监控等场景。
|
7天前
|
缓存 监控 供应链
京东自定义 API 操作深度分析及 Python 实现
京东开放平台提供丰富API接口,支持商品、订单、库存等电商全链路场景。通过自定义API组合调用,可实现店铺管理、数据分析、竞品监控等功能,提升运营效率。本文详解其架构、Python实现与应用策略。
缓存 监控 供应链
26 0
缓存 监控 数据挖掘
25 0
JSON 监控 API
25 0
|
19天前
|
供应链 数据可视化 数据挖掘
微店 API 赋能,个体电商店铺运营效率大提升
在数字化浪潮下,个体电商面临激烈竞争。微店API通过自动化订单处理、智能库存管理、数据驱动决策和营销自动化,助力小商家提升运营效率,降低成本,实现智能化管理,成为电商突围利器。
29 0