×

微店 item_search 接口对接全攻略:从入门到精通

万邦科技Lex 万邦科技Lex 发表于2025-10-07 13:25:54 浏览238 评论0

抢沙发发表评论

             注册账号免费测试微店API数据接口

微店开放平台的item_search接口是根据关键词搜索商品列表的核心工具,适用于店铺选品、竞品分析、电商聚合平台等场景。本文将全面讲解该接口的对接流程、参数配置、代码实现及最佳实践,帮助开发者从入门到精通掌握接口使用。

一、接口基础认知

  1. 核心功能item_search接口通过关键词、分类、价格区间等条件筛选微店商品,返回符合条件的商品列表及基础信息,包括:
    • 商品基本信息:ID、标题、主图、详情页链接

    • 价格信息:售价、原价、促销价

    • 交易信息:销量、好评率

    • 店铺信息:店铺 ID、店铺名称

  2. 接口端点
    • 正式环境:https://api.weidian.com/item/search

    • 沙箱环境:https://sandbox.api.weidian.com/item/search(测试使用)

  3. 请求方式:仅支持 HTTP POST
  4. 数据格式:请求与响应均为 JSON 格式
  5. 认证方式:采用appkey+signature签名认证,无需令牌(Token)

二、对接前置准备

  1. 开发者账号注册访问微店开放平台注册账号,完成实名认证(个人或企业均可)。
  2. 创建应用与获取密钥
    • 在开放平台控制台创建应用,填写应用名称和用途

    • 应用创建后,在「应用详情」中获取appkeyappsecretappsecret需严格保密)

  3. 权限说明
    • item_search接口为基础接口,默认开放调用权限

    • 如需获取更多字段或提高调用频率,需提交权限升级申请

  4. 环境准备
    • 开发语言:支持 Python/Java/PHP 等任意可发起 HTTP 请求的语言

    • 测试工具:Postman 或微店开放平台在线调试工具

    • 依赖库:Python 需安装requests库(pip install requests

三、接口调用流程

  1. 参数组装接口参数分为「公共参数」和「业务参数」:
    示例参数结构:
    json
    {
      "appkey": "your_appkey",
      "timestamp": 1620000000,
      "signature": "签名值",
      "keyword": "连衣裙",
      "page": 1,
      "page_size": 20,
      "price_min": 50,
      "price_max": 200}
    • 公共参数appkeytimestamp(秒级时间戳)、signature(签名)

    • 业务参数keyword(搜索关键词,必填)、page(页码)、page_size(每页条数)、price_min/price_max(价格区间)等

  2. 签名生成签名生成步骤与item_get接口一致:
    1. 收集所有参数(除signature外),按参数名 ASCII 码升序排序

    2. 拼接为key=value&key=value格式

    3. 尾部追加&appsecret=your_appsecret

    4. 对拼接字符串进行 MD5 加密(32 位小写),结果即为signature

  3. 发送请求
    • 请求头设置Content-Type: application/json

    • 将参数以 JSON 格式放入请求体,发送 POST 请求到接口地址

  4. 响应处理成功响应包含items(商品列表)和total(总条数),错误响应包含errcodeerrmsg

四、代码实现示例(Python)

以下是调用微店item_search接口的完整代码,包含签名生成、分页处理和错误处理:
import requests
import hashlib
import time
import json

class WeidianSearchApi:
    def __init__(self, appkey, appsecret):
        self.appkey = appkey
        self.appsecret = appsecret
        self.url = "https://api.weidian.com/item/search"  # 正式环境
        # 沙箱环境:https://sandbox.api.weidian.com/item/search

    def generate_signature(self, params):
        """生成签名"""
        # 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
        sign_str += f"&appsecret={self.appsecret}"
        # 4. MD5加密(32位小写)
        signature = hashlib.md5(sign_str.encode()).hexdigest()
        return signature

    def item_search(self, keyword, page=1, page_size=20, **kwargs):
        """
        搜索商品列表
        :param keyword: 搜索关键词(必填)
        :param page: 页码,默认1
        :param page_size: 每页条数,默认20,最大50
        :param kwargs: 可选参数(price_min, price_max, sort等)
        :return: 搜索结果
        """
        # 1. 组装基础参数
        params = {
            "appkey": self.appkey,
            "timestamp": int(time.time()),  # 秒级时间戳
            "keyword": keyword,
            "page": page,
            "page_size": page_size
        }
        # 2. 合并可选参数
        params.update(kwargs)

        # 3. 生成签名
        params["signature"] = self.generate_signature(params)

        try:
            # 4. 发送POST请求
            response = requests.post(
                url=self.url,
                json=params,
                headers={"Content-Type": "application/json"},
                timeout=10
            )
            response.raise_for_status()
            result = response.json()

            # 5. 处理响应
            if result.get("errcode") == 0:
                return {
                    "success": True,
                    "total": result.get("total", 0),
                    "page": page,
                    "page_size": page_size,
                    "items": result.get("items", [])
                }
            else:
                return {
                    "success": False,
                    "error_code": result.get("errcode"),
                    "error_msg": result.get("errmsg")
                }

        except Exception as e:
            return {
                "success": False,
                "error_msg": f"请求异常: {str(e)}"
            }

# 使用示例
if __name__ == "__main__":
    # 替换为自己的appkey和appsecret
    APPKEY = "your_appkey"
    APPSECRET = "your_appsecret"

    # 初始化API客户端
    api = WeidianSearchApi(APPKEY, APPSECRET)

    # 搜索"连衣裙",第1页,20条/页,价格50-200元,按销量降序
    result = api.item_search(
        keyword="连衣裙",
        page=1,
        page_size=20,
        price_min=50,
        price_max=200,
        sort="sales_desc"  # 排序方式:sales_desc-销量降序,price_asc-价格升序
    )

    if result["success"]:
        print(f"共搜索到 {result['total']} 个商品")
        print(f"第 {result['page']} 页,当前页 {len(result['items'])} 个商品")
        
        # 打印前5个商品信息
        for i, item in enumerate(result["items"][:5]):
            print(f"\n商品 {i+1}:")
            print(f"ID: {item.get('item_id')}")
            print(f"标题: {item.get('title')}")
            print(f"售价: {item.get('price')} 元")
            print(f"销量: {item.get('sales')} 件")
            print(f"主图: {item.get('main_img')}")
    else:
        print(f"搜索失败: {result['error_msg']} (错误码: {result.get('error_code')})")


五、参数详解与高级用法

  1. 核心参数说明
    • default:默认排序

    • price_asc:价格升序

    • price_desc:价格降序

    • sales_desc:销量降序

    • new_desc:最新上架

    • keyword:搜索关键词(必填),支持空格分隔多关键词(如 "夏季 连衣裙")

    • page:页码,默认 1,最大支持 50 页

    • page_size:每页条数,默认 20,最大 50

    • price_min/price_max:价格区间筛选(单位:元)

    • sort:排序方式:

  2. 分页遍历技巧如需获取全部搜索结果,可通过循环递增page实现分页遍历:
    python
    运行
    total = result["total"]page_size = 50total_pages = (total + page_size - 1) // page_size  # 计算总页数for page in range(1, total_pages + 1):
        page_result = api.item_search(keyword="连衣裙", page=page, page_size=page_size)
        # 处理当前页数据
  3. 精准搜索策略
    • 组合筛选:使用price_min+price_max+sort实现精准筛选

    • 关键词优化:使用更具体的关键词(如 "夏季 碎花 连衣裙 中长款")减少无效结果

六、错误处理与调试

  1. 常见错误码解析
    • 10001:签名错误 → 检查参数排序和签名生成逻辑

    • 10003:请求频率超限 → 微店默认 QPS 限制为 10,需降低调用频率

    • 20010:关键词为空 → 确保keyword参数不为空

    • 20011:页码超出范围 → 检查page是否超过最大支持页数

  2. 调试建议
    • 使用微店开放平台的在线调试工具验证参数

    • 检查timestamp是否为当前时间(误差≤5 分钟)

    • 记录请求参数和响应结果,便于问题排查

七、最佳实践与注意事项

  1. 性能优化
    • 合理设置page_size(建议 20-50),减少接口调用次数

    • 实现本地缓存(热门搜索词结果缓存 5-10 分钟)

    • 非实时场景可采用异步任务批量获取数据

  2. 合规使用
    • 遵守《微店开放平台服务协议》,不得用于爬虫或商业竞争

    • 展示商品数据时需保留微店来源标识

    • 避免高频调用影响平台稳定性

  3. 稳定性保障
    • 实现超时重试机制(最多 3 次,间隔 1-3 秒)

    • 对返回数据进行格式校验,处理异常字段

    • 监控接口调用成功率,异常时触发告警

通过本文的指南,开发者可以系统掌握微店item_search接口的对接方法和优化技巧。在实际应用中,应根据业务需求设计合理的搜索策略,平衡搜索效果、性能和合规性,构建稳定高效的商品搜索功能


群贤毕至

访客