在对接 VVIC 平台 API 时,商品详情接口是获取商品核心信息的关键入口。本文将详细介绍 VVIC 商品详情接口的调用规范、签名机制实现以及数据解析技巧,并提供可直接使用的 Python 代码示例,帮助开发者快速完成对接。
接口调用准备工作
必要参数说明
app_key:平台分配的应用标识 timestamp:请求时间戳(毫秒级) sign:签名信息 item_id:商品 ID version:接口版本,当前为 1.0
签名生成规则
所有参数按 key 进行 ASCII 升序排序 拼接为 "key=value&key=value" 格式 末尾拼接 app_secret 进行 MD5 加密并转为大写
完整代码实现 VVIC平台商品详情接口调用代码
import hashlib
import time
import json
class VvicApiClient:
def __init__(self, app_key, app_secret):
self.app_key = app_key
self.app_secret = app_secret
self.base_url = "https://api.vvic.com/item/detail"
def _generate_sign(self, params):
"""生成签名"""
# 按key升序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼接参数
sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
# 拼接app_secret
sign_str += self.app_secret
# MD5加密并转为大写
md5 = hashlib.md5()
md5.update(sign_str.encode('utf-8'))
return md5.hexdigest().upper()
def get_item_detail(self, item_id):
"""获取商品详情"""
# 构建基础参数
params = {
"app_key": self.app_key,
"timestamp": str(int(time.time() * 1000)),
"item_id": item_id,
"version": "1.0"
}
# 生成签名
params["sign"] = self._generate_sign(params)
try:
# 发送请求
response = requests.get(self.base_url, params=params, timeout=10)
response.raise_for_status() # 抛出HTTP错误
# 解析响应
result = response.json()
# 处理业务逻辑错误
if result.get("code") != 0:
print(f"接口错误: {result.get('msg')}")
return None
return self._parse_item_data(result.get("data", {}))
except requests.exceptions.RequestException as e:
print(f"请求异常: {str(e)}")
return None
except json.JSONDecodeError:
print("响应数据解析失败")
return None
def _parse_item_data(self, item_data):
"""解析商品数据,提取关键信息"""
if not item_data:
return None
# 提取核心字段
parsed = {
"item_id": item_data.get("item_id"),
"title": item_data.get("title"),
"price": item_data.get("price"),
"original_price": item_data.get("original_price"),
"sales_count": item_data.get("sales_count"),
"shop_name": item_data.get("shop", {}).get("shop_name"),
"main_images": item_data.get("main_images", []),
"category": item_data.get("category", {}).get("name"),
"specs": self._parse_specs(item_data.get("specs", []))
}
return parsed
def _parse_specs(self, specs):
"""解析规格信息"""
parsed_specs = []
for spec in specs:
parsed_specs.append({
"spec_id": spec.get("spec_id"),
"spec_name": spec.get("spec_name"),
"price": spec.get("price"),
"stock": spec.get("stock"),
"spec_image": spec.get("spec_image")
})
return parsed_specs
使用示例
# 替换为实际的app_key和app_secret
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
# 初始化客户端
client = VvicApiClient(APP_KEY, APP_SECRET)
# 获取商品详情
item_id = "12345678" # 替换为实际商品ID
item_detail = client.get_item_detail(item_id)
if item_detail:
print("商品详情:")
print(json.dumps(item_detail, ensure_ascii=False, indent=2))
代码关键功能解析
签名机制实现
代码中的_generate_sign方法严格按照 VVIC 平台要求实现了签名生成逻辑,确保请求合法性。
异常处理
包含了网络请求异常、JSON 解析异常和业务逻辑错误的完整处理,提高了代码的健壮性。
数据解析
通过_parse_item_data和_parse_specs方法对返回数据进行结构化处理,提取了业务所需的核心字段,避免直接使用原始数据带来的不便。
调用注意事项
接口有调用频率限制,建议添加请求间隔控制 app_key和app_secret需妥善保管,避免泄露 生产环境中建议添加日志记录,方便问题排查 当接口版本更新时,需及时调整参数和数据解析逻辑