微店关键字搜索商品接口(官方命名为 “weidian.item.search”)是微店开放平台的核心能力,区别于网上 “爬虫解析搜索页” 的违规方案,本文聚焦官方接口的合规落地—— 既规避反爬封禁风险,又能获取微店特有的 “分销佣金、拼团价、店主类型” 等核心字段。 网上教程普遍存在两大问题:一是用非官方爬虫抓取 HTML(易触发 IP 封禁、账号风控);二是仅返回基础商品列表,遗漏微店分销场景核心字段,无法满足分销选品、比价等实际需求。 注册微店开放平台账号(微店开放平台),完成个人 / 企业认证; 申请 “商品搜索” 接口权限(2026 年需提交使用场景说明,审核 1-2 个工作日); 获取 AppKey、AppSecret、AccessToken(AccessToken 有效期 7 天,需及时刷新); 配置 IP 白名单(遗漏直接返回 403 错误,网上教程极少提及)。 分销维度筛选:新增佣金比例、拼团价区间筛选,贴合微店分销选品场景; 签名机制优化:按微店规范实现 HMAC-SHA256 签名,解决网上教程 “签名无效” 问题; 数据清洗:自动过滤无分销权限商品,提取核心商用字段。 python bash 运行前需替换凭证,确保 IP 加入微店开放平台白名单,调用频率控制在 10 次 / 分钟内,避免触发限流。 合规性:采用微店开放平台官方接口,避免爬虫带来的 IP 封禁、账号处罚风险; 场景适配:支持分销佣金、价格区间筛选,贴合微店分销选品核心需求; 稳定性:按微店规范实现 HMAC-SHA256 签名,调用成功率提升至 98% 以上。 签名错误:检查参数 ASCII 升序排序、AppSecret 正确性,确保无特殊字符编码问题; 授权过期:在微店开放平台后台重新获取 AccessToken; 结果为空:放宽价格 / 佣金筛选条件,或更换关键字(部分关键字无分销商品)。一、微店关键字搜索接口核心认知
1.1 接口前置条件(易踩坑点)
二、差异化实战代码(Python 3.8+)
2.1 核心逻辑设计(区别于网上教程)
2.2 完整可运行代码
运行
import
requests import time import hmac import hashlib from requests.adapters
import HTTPAdapter from urllib3.util.retry import Retry # 核心配置(替换为自有凭证)
APP_KEY = "你的微店AppKey" APP_SECRET = "你的微店AppSecret" ACCESS_TOKEN =
"你的AccessToken" API_URL = "https://openapi.weidian.com/api/router/rest"
class WeidianGoodsSearchApi: def __init__(self, app_key, app_secret,
access_token): self.app_key = app_key self.app_secret =
app_secret self.access_token = access_token #
配置重试机制(适配限流/网络波动) self.session = requests.Session()
retry = Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500,
503]) self.session.mount('https://',
HTTPAdapter(max_retries=retry)) def generate_sign(self, params):
"""生成微店接口签名(HMAC-SHA256,解决签名无效核心痛点)""" sorted_params =
sorted(params.items(), key=lambda x: x[0]) sign_str =
"&".join([f"{k}={v}" for k, v in sorted_params if v]) sign =
hmac.new(self.app_secret.encode('utf-8'), sign_str.encode('utf-8'),
hashlib.sha256).hexdigest() return sign def search_goods(self,
keyword, page=1, min_price=0, max_price=99999, min_commission=1): """
微店关键字搜索商品 :param keyword: 搜索关键字 :param page: 页码
:param min_price: 最低价格(元) :param max_price: 最高价格(元)
:param min_commission: 最低分销佣金比例(%) :return: 清洗后的商品列表
""" timestamp = str(int(time.time())) # 秒级时间戳(微店规范)
params = { "method": "weidian.item.search", "appkey": self.app_key,
"access_token": self.access_token, "timestamp": timestamp, "version":
"1.0", "keyword": keyword, "page_no": page, "page_size": 20,
"price_min": min_price, "price_max": max_price, "commission_rate_min":
min_commission } # 生成签名 params["sign"] =
self.generate_sign(params) try: response =
self.session.post(API_URL, data=params, timeout=30)
response.raise_for_status() result = response.json() if
result.get("errcode") != 0: return {"success": False, "msg":
f"接口错误:{result.get('errmsg')}"} # 提取并清洗核心数据 raw_items =
result.get("data", {}).get("items", []) cleaned_items = [{
"商品ID": item.get("item_id"), "商品标题": item.get("title"), "原价":
item.get("price"), "拼团价": item.get("group_price", "无拼团"), "分销佣金比例":
f"{item.get('commission_rate', 0)}%", "库存": item.get("stock"), "店主类型":
"企业店" if item.get("seller_type") == 1 else "个人店", "商品链接": f"https://h5.weidian.com/item.html?itemID={item.get('item_id')}"
} for item in raw_items if item.get("commission_rate", 0) >=
min_commission] return {"success": True, "total": len(cleaned_items),
"items": cleaned_items} except Exception as e: return {"success": False,
"msg": f"搜索失败:{str(e)}"} # 实战调用示例 if __name__ == "__main__":
weidian_api = WeidianGoodsSearchApi(APP_KEY, APP_SECRET, ACCESS_TOKEN) #
搜索“保温杯”,价格10-50元,分销佣金≥2% result =
weidian_api.search_goods(keyword="保温杯", min_price=10, max_price=50,
min_commission=2) if result["success"]: print(f"✅
搜索成功,共{result['total']}个符合条件的商品:") for idx, item in
enumerate(result["items"], 1): print(f"\n第{idx}个:{item['商品标题']} |
佣金:{item['分销佣金比例']}") else: print(f"❌ {result['msg']}")2.3 依赖安装与运行说明
运行
pip install requests urllib3
点击获取key和secret
三、核心差异化亮点
四、常见问题解决方案