下面给你一个实用的、合规的“如何调用 Shopee/Open Platform API(知虾 API)”的快速指南。由于不同地区和版本可能存在差异,实际的端点、参数名和签名规则请以官方文档为准。我会给出通用的调用流程、关键要点以及可直接使用的示例代码模板(Python 和 Node.js),方便你快速上手并再做本地化调整。
一、调用前的准备工作
- 注册并创建应用
- 在 Shopee 开放平台申请开发者账号,创建一个应用,获取 App ID(或 App Key/Secret)等凭证。
- 设置好回调地址(Redirect URI),以便完成 OAuth 授权码流程获取访问令牌。
- 获取授权并拿到访问令牌
- 使用 OAuth 2.0 流程,让店铺管理员授权你的应用访问其店铺数据。
- 通过授权码换取访问令牌(access_token)和刷新令牌(refresh_token)。
- 记录店铺的 shop_id、partner_id、对应的账号信息,后续调用需要这些信息。
- 理解并遵守限流和合规要求
- 阅读文档中的速率限制、错误码、重试策略。
- 使用正式的开发/沙盒环境进行初步测试,避免在生产环境直接高并发请求。
二、核心调用要点(通用做法)
- 统一的请求结构
- 需要包含的公共参数通常有:app_id、partner_id、shop_id、timestamp、nonce(或 trace_id)、签名(sign)等。
- 请求签名通常使用对参数的排序后做 HMAC-SHA256(或指定算法)得到的 sign,确保请求的完整性与认证性。
- 签名流程的简要思路
- 将需要签名的参数按字母顺序排序,拼成 query 字符串(不包含 sign)。
- 使用你的 app_secret/secret key 对该字符串进行 HMAC-SHA256(或平台指定算法)并转为十六进制小写字符串,得到 sign。
- 将 sign 作为请求参数或请求头的一部分发送,服务器端会用同样方式校验。
- 请求方式
- 大多数端点支持 GET(查询)或 POST(创建/更新),具体看官方文档。
- 访问令牌(access_token)通常要么放在 Authorization 头(Bearer token),要么放在请求参数中(按官方要求)。
- 沙盒与正式环境
- 优先在沙盒环境测试接口行为、数据结构及签名逻辑,确保生产环境调用不出现错误。
三、示例代码模板(仅作结构参考,请以官方参数命名为准)
1) Python 3 示例(请求示意 + 签名实现)
- 说明:将 APP_ID、APP_SECRET、PARTNER_ID、SHOP_ID、ACCESS_TOKEN、BASE_URL、ENDPOINT 替换成实际值。
- 依赖:requests
- 伪代码用途,需结合官方文档调整参数名和签名规则。
import time
import hmac
import hashlib
import requests
import urllib.parse
APP_ID = "YOUR_APP_ID"
APP_SECRET = "YOUR_APP_SECRET"
PARTNER_ID = "YOUR_PARTNER_ID"
SHOP_ID = "YOUR_SHOP_ID"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"
BASE_URL = "https://open.shopee.com" # 实际端点请以官方文档为准
ENDPOINT = "/api/v2/shop/get_orders" # 示例端点,请以实际端点为准
def generate_signature(params, secret):
# 将参数按键排序后拼接成查询字符串(不带 sign)
# 具体拼接规则请以官方文档为准
items = sorted((k, str(v)) for k, v in params.items())
query = "&".join(f"{k}={v}" for k, v in items)
# 使用 HMAC-SHA256 生成签名
sig = hmac.new(secret.encode('utf-8'), query.encode('utf-8'), hashlib.sha256).hexdigest()
return sig
def call_api():
ts = int(time.time())
raw_params = {
"app_id": APP_ID,
"partner_id": PARTNER_ID,
"shop_id": SHOP_ID,
"timestamp": ts,
"timestamp": ts,
"order": "desc", # 示例参数,请以实际接口为准
# 其他接口所需参数
}
sign = generate_signature(raw_params, APP_SECRET)
raw_params["sign"] = sign
headers = {
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
}
url = f"{BASE_URL}{ENDPOINT}"
resp = requests.get(url, params=raw_params, headers=headers, timeout=30)
return resp.json()
if name == "main":
data = call_api()
print(data)
2) Node.js 示例(请求示意 + 签名实现)
- 依赖:node-fetch 或 axios
- 也请替换实际的参数名和端点
const crypto = require('crypto');
const fetch = require('node-fetch');
const APP_ID = 'YOUR_APP_ID';
const APP_SECRET = 'YOUR_APP_SECRET';
const PARTNER_ID = 'YOUR_PARTNER_ID';
const SHOP_ID = 'YOUR_SHOP_ID';
const ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';
const BASE_URL = 'https://open.shopee.com';
const ENDPOINT = '/api/v2/shop/get_orders'; // 示例端点,请以实际端点为准
function generateSignature(params, secret) {
const keys = Object.keys(params).sort();
const query = keys.map(k => ${k}=${params[k]}).join('&');
return crypto.createHmac('sha256', secret).update(query).digest('hex');
}
async function callApi() {
const ts = Math.floor(Date.now() / 1000);
const rawParams = {
app_id: APP_ID,
partner_id: PARTNER_ID,
shop_id: SHOP_ID,
timestamp: ts,
// 其他接口所需参数
};
const sign = generateSignature(rawParams, APP_SECRET);
rawParams.sign = sign;
const url = new URL(BASE_URL + ENDPOINT);
Object.keys(rawParams).forEach(k => url.searchParams.append(k, rawParams[k]));
const res = await fetch(url.toString(), {
method: 'GET',
headers: {
'Authorization': Bearer ${ACCESS_TOKEN},
'Content-Type': 'application/json'
}
});
const data = await res.json();
return data;
}
callApi().then(console.log).catch(console.error);
四、实操小贴士
- 认真对照官方文档:参数命名、签名算法、必填字段、HTTP 方法、头部要求等可能随版本不同而变化。
- 使用沙盒环境先验证:确保签名、授权、数据结构无误后再进入生产环境。
- 错误码处理:常见的如签名错误、令牌过期、权限不足、参数缺失等,结合文档的错误码进行重试与错误定位。
- 安全性注意:
- 不要把 APP_SECRET、访问令牌硬编码在前端代码中,或暴露在客户端。
- 使用服务器端中间层完成签名、令牌管理和 API 调用。
- 开启必要的日志审计与访问控制(RBAC/MFA)。
五、下一步我可以做的
- 帮你把具体端点、请求参数和签名规则整理成一份与你业务对齐的“调用手册”(包含常用接口,如获取订单、获取商品、更新库存等);
- 根据你所在地区、需要接入的接口模块(订单、库存、客服、广告等)给出对应的代码模板和测试用例;
- 提供一个简易的 Postman/Insomnia 请求集合,方便你快速测试和演示。
如果你愿意,请告诉我以下信息,我可以给你定制化的对接方案和完整的调用手册:
- 你所在的区域/国家及打算接入的 Shopee 版本(区域平台)。
- 需要调用的具体接口(例如:获取订单、获取商品、更新库存、获取店铺信息等)。
- 你偏好的编程语言和工具环境(Python、Node.js、Postman 等)。
- 是否已有现成的后端框架或计划从头实现。
我可以据此给出一个区域化的接口对照清单和可直接落地的调用模板。
