作者:鲨鱼 | 时间:2025年10月23日
原创文章,首发于优快云,如需转载,请注明出处。
目录
- 引言:为什么需要将抖音订单同步到ERP?
- 抖音电商开放平台最新变化(2025)
- 前置准备:权限申请与资质要求
- 核心接口详解:获取订单数据
- OAuth 2.0 授权流程(关键步骤)
- Python 实战:调用接口并同步到本地数据库
- 数据结构解析与字段映射
- 常见问题与避坑指南
- 最佳实践建议
- 总结
- 结束语
- 作者简介
一、引言:为什么需要将抖音订单同步到ERP?
随着“内容+电商”模式的爆发,越来越多品牌在抖音小店实现快速增长。但随之而来的问题是:
- 每天登录抖店后台手动导出订单?
- 发货打单靠复制粘贴,效率低还易出错?
- 库存无法实时同步,导致超卖?
- 财务对账全靠人工核对?
如果你正在使用本地ERP、WMS或自研系统,通过抖音官方API自动同步订单数据,就能彻底解决这些问题,实现:
✅ 订单自动拉取
✅ 批量打单发货
✅ 库存联动扣减
✅ 销售数据自动归集
本文将基于2025年10月最新版抖音电商开放平台接口规范,手把手教你完成对接。
二、抖音电商开放平台最新变化(2025)
2025年起,抖音对开放平台进行了多项升级:
| 变化点 | 说明 |
|---|---|
| 统一域名 | 所有接口迁移至 https://open-api.tiktokglobalshop.com(国内商家使用 https://open.douyin.com) |
| 强制HTTPS + 签名 | 所有请求必须携带 access_token 和 sign 签名 |
| Webhook事件推送 | 支持订单创建、支付成功、退款等实时事件通知 |
| 权限精细化 | 需单独申请 order_read、logistics_write 等细粒度权限 |
⚠️ 注意:旧版
api.douyin.com已逐步停用,请务必使用新接口。
三、前置准备:权限申请与资质要求
1. 开通抖音电商开放平台
- 登录 抖音电商开放平台
- 使用已开通抖店的账号登录
- 完成企业认证(个人店铺权限受限)
2. 创建应用
- 进入「开发者中心」→「应用管理」→「创建应用」
- 应用类型:选择“自用型应用”(仅用于自己店铺)
- 回调地址(Redirect URI):填写你的服务器地址,如
https://yourdomain.com/callback/douyin - 权限申请:
order.read:读取订单信息logistics.write:发货操作(可选)
✅ 提示:用途描述写“用于订单自动同步至内部ERP系统,提升发货效率”,避免敏感词。
3. 获取凭证
- 应用审核通过后,获取:
Client Key(原 App ID)Client Secret(原 App Secret)
四、核心接口详解:获取订单数据
1. 获取订单列表(推荐)
POST https://open.douyin.com/order/list
Headers:
Content-Type: application/json
x-tt-app-id: YOUR_CLIENT_KEY
Authorization: Bearer ACCESS_TOKEN
Body:
{
"start_time": 1729440000, // Unix时间戳(2025-10-22 00:00:00)
"end_time": 1729526399, // 2025-10-22 23:59:59
"page": 1,
"size": 50
}
2. 获取订单详情(按需调用)
GET https://open.douyin.com/order/detail?order_id=ORDER_SN
Headers:
Authorization: Bearer ACCESS_TOKEN
✅ 建议:先批量拉取订单ID,再按需获取详情,减少API调用次数。
五、OAuth 2.0 授权流程(关键步骤)
1. 生成授权URL
引导商家跳转至抖音授权页:
import urllib.parse
def generate_auth_url(client_key, redirect_uri):
base = "https://open.douyin.com/oauth/connect"
params = {
"client_key": client_key,
"response_type": "code",
"scope": "order.read",
"redirect_uri": redirect_uri
}
return f"{base}?{urllib.parse.urlencode(params)}"
2. 用 code 换取 access_token
import requests
def get_access_token(client_key, client_secret, code, redirect_uri):
url = "https://open.douyin.com/oauth/access_token/"
data = {
"client_key": client_key,
"client_secret": client_secret,
"code": code,
"grant_type": "authorization_code",
"redirect_uri": redirect_uri
}
resp = requests.post(url, json=data)
result = resp.json()
if result.get("data"):
return result["data"]["access_token"], result["data"]["refresh_token"]
else:
raise Exception(f"授权失败:{result}")
⚠️
access_token有效期为 2小时,需定期刷新!
六、Python 实战:调用接口并同步到本地数据库
1. 安装依赖
pip install requests pymysql
2. 封装订单拉取函数
import time
import requests
def fetch_douyin_orders(access_token, start_time, end_time, page=1, size=50):
url = "https://open.douyin.com/order/list"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
"x-tt-app-id": "YOUR_CLIENT_KEY"
}
payload = {
"start_time": int(start_time),
"end_time": int(end_time),
"page": page,
"size": size
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
if data.get("code") == 0:
return data["data"].get("orders", []), data["data"].get("total", 0)
else:
raise Exception(f"接口错误:{data.get('message')}")
3. 写入本地MySQL数据库
import pymysql
def save_orders_to_db(orders):
conn = pymysql.connect(
host="localhost",
user="erp_user",
password="your_password",
database="erp_db",
charset="utf8mb4"
)
cursor = conn.cursor()
insert_sql = """
INSERT INTO orders (platform, order_sn, pay_time, receiver, phone, address, payment, status)
VALUES (%s, %s, FROM_UNIXTIME(%s), %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE status = VALUES(status)
"""
for order in orders:
cursor.execute(insert_sql, (
"douyin",
order["order_id"],
order["pay_time"],
order["receiver_info"]["name"],
order["receiver_info"]["phone"],
order["receiver_info"]["address_detail"],
order["payment_amount"] / 100, # 抖音单位:分 → 元
order["status"]
))
conn.commit()
cursor.close()
conn.close()
4. 定时任务(每15分钟同步一次)
import schedule
def sync_douyin_orders():
try:
# 1. 刷新 token(略)
# 2. 获取昨天至今的订单
start = time.mktime((2025, 10, 22, 0, 0, 0, 0, 0, 0))
end = time.time()
orders, total = fetch_douyin_orders("your_access_token", start, end)
save_orders_to_db(orders)
print(f"成功同步 {len(orders)} 条订单")
except Exception as e:
print(f"同步失败:{e}")
# 每15分钟执行一次
schedule.every(15).minutes.do(sync_douyin_orders)
while True:
schedule.run_pending()
time.sleep(60)
七、数据结构解析与字段映射
抖音返回的订单核心字段(简化版):
| 抖音字段 | 类型 | 说明 | 映射到ERP字段 |
|---|---|---|---|
order_id | string | 订单编号 | order_sn |
pay_time | int | 支付时间(Unix秒) | pay_time |
status | string | 订单状态:unpaid(待付款)paid(待发货)shipped(已发货) | status |
payment_amount | int | 实付金额(单位:分) | payment(需/100) |
receiver_info.name | string | 收货人姓名 | receiver |
receiver_info.phone | string | 手机号 | phone |
receiver_info.address_detail | string | 详细地址 | address |
items | array | 商品列表 | items(JSON存储) |
八、常见问题与避坑指南
| 问题 | 原因 | 解决方案 |
|---|---|---|
返回 {"code": 40001, "message": "invalid access_token"} | Token过期 | 用 refresh_token 调用 /oauth/refresh_token/ 刷新 |
| 接口返回空数据 | 时间范围不对或无权限 | 检查 start_time/end_time 是否在7天内(抖音限制) |
| 签名错误 | 未正确处理 x-tt-app-id 或 header | 确保 x-tt-app-id 在 header 中,且 body 为 JSON |
| IP被限流 | 请求频率过高 | 控制QPS ≤ 10,使用队列缓冲 |
| 无法获取手机号 | 隐私保护策略 | 抖音不直接返回明文手机号,需通过电子面单接口获取 |
九、最佳实践建议
- Token自动刷新:建立定时任务,每1小时刷新一次
access_token。 - 增量同步:只拉取最近24小时订单,避免重复拉取。
- 失败重试机制:网络异常时自动重试3次,并记录日志。
- Webhook补充:配置事件推送,实时捕获新订单,减少轮询压力。
- 数据脱敏:收货人信息加密存储,符合《个人信息保护法》。
十、总结
通过本文,你已掌握:
✅ 抖音2025最新订单API对接流程
✅ OAuth 2.0授权与Token管理
✅ Python自动化同步到本地ERP
✅ 处理常见错误与优化性能
现在,你可以告别手动导单,让抖音订单自动流入你的系统,真正实现高效、精准、合规的电商运营。
十一、结束语
技术的价值在于解放人力。希望本文能帮助你在抖音电商的浪潮中,用自动化工具赢得效率优势。
十二、作者简介
鲨鱼,全栈开发者,电商系统架构师,优快云博客专家,专注于电商API对接、数据自动化处理、ERP系统开发等领域。拥有多年电商平台对接经验,擅长使用Python、Java等语言实现电商数据的采集、分析与可视化展示。
如需转载,请注明出处,尊重原创,从你我做起!

1081

被折叠的 条评论
为什么被折叠?



