8.8 KiB
8.8 KiB
Woocommerce API 配置指南
1. 认证方式配置
Woocommerce API 支持两种认证方式:Basic Auth 和 OAuth 1.0a。对于使用 customer_key 和 customer_secret 的情况,我们需要使用 OAuth 1.0a 认证。
1.1 OAuth 1.0a 认证配置
在 DataX 的 RESTful Reader 中,我们可以通过自定义请求参数和签名来实现 OAuth 1.0a 认证。以下是配置示例:
{
"reader": {
"name": "restfulreader",
"parameter": {
"url": "https://your-woocommerce-site.com/wp-json/wc/v3/products",
"method": "GET",
"headers": {
"Accept": "application/json"
},
"requestParams": {
"consumer_key": "your_consumer_key",
"consumer_secret": "your_consumer_secret"
},
"pagination": {
"type": "page",
"pageSize": 100,
"pageNum": 1,
"totalCount": 1000
},
"dataPath": "$.*",
"column": [
// 列配置
]
}
}
}
1.2 认证参数说明
consumer_key: Woocommerce 后台生成的消费者密钥consumer_secret: Woocommerce 后台生成的消费者密钥密码
1.3 获取消费者密钥
- 登录 Woocommerce 后台
- 进入
WooCommerce > 设置 > 高级 > REST API - 点击
添加密钥按钮 - 填写描述,选择用户和权限
- 点击
生成 API 密钥 - 保存生成的
consumer_key和consumer_secret
2. 分页获取全部数据
Woocommerce API 默认一次最多返回 100 条数据,要获取全部数据,我们需要使用分页机制。DataX 的 RESTful Reader 支持多种分页方式,这里我们使用基于页码的分页。
2.1 分页配置示例
{
"pagination": {
"type": "page",
"pageSize": 100,
"pageNum": 1,
"totalCount": 1000,
"pageToken": {
"offset": 0,
"limit": 100
},
"pageUrlTemplate": "${url}?page=${pageNum}&per_page=${pageSize}"
}
}
2.2 分页参数说明
| 参数名 | 说明 | 默认值 |
|---|---|---|
type |
分页类型,支持 page(基于页码)、offset(基于偏移量)、cursor(基于游标) |
无 |
pageSize |
每页数据条数 | 100 |
pageNum |
起始页码 | 1 |
totalCount |
预估总数据量,用于计算总页数 | 1000 |
pageUrlTemplate |
分页 URL 模板,用于构建请求 URL | 无 |
2.3 动态获取总数据量
为了确保获取全部数据,我们可以先请求一次 API 获取总数据量,然后再进行分页请求。以下是实现思路:
- 首先发送一次请求,获取总数据量
- 根据总数据量和每页条数计算总页数
- 遍历所有页码,获取全部数据
2.4 完整的分页配置示例
{
"job": {
"content": [
{
"reader": {
"name": "restfulreader",
"parameter": {
"url": "https://your-woocommerce-site.com/wp-json/wc/v3/products",
"method": "GET",
"headers": {
"Accept": "application/json"
},
"requestParams": {
"consumer_key": "your_consumer_key",
"consumer_secret": "your_consumer_secret",
"per_page": 100
},
"pagination": {
"type": "page",
"pageSize": 100,
"pageNum": 1,
"totalCount": 0,
"dynamicTotalCount": true,
"totalCountPath": "$['X-WP-Total']",
"pageUrlTemplate": "${url}?page=${pageNum}&per_page=${pageSize}&consumer_key=${requestParams.consumer_key}&consumer_secret=${requestParams.consumer_secret}"
},
"dataPath": "$.*",
"column": [
{
"name": "id",
"type": "long"
},
{
"name": "name",
"type": "string"
},
{
"name": "sku",
"type": "string"
},
{
"name": "price",
"type": "string"
},
{
"name": "stock_quantity",
"type": "long"
},
{
"name": "created_at",
"type": "string"
}
]
}
},
"writer": {
// 写入配置
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
3. 完整的作业配置示例
以下是一个完整的从 Woocommerce API 获取产品数据并写入 MySQL 的作业配置,包含了 OAuth 1.0a 认证和分页配置:
{
"job": {
"content": [
{
"reader": {
"name": "restfulreader",
"parameter": {
"url": "https://your-woocommerce-site.com/wp-json/wc/v3/products",
"method": "GET",
"headers": {
"Accept": "application/json"
},
"requestParams": {
"consumer_key": "ck_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"consumer_secret": "cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"per_page": 100
},
"pagination": {
"type": "page",
"pageSize": 100,
"pageNum": 1,
"totalCount": 0,
"dynamicTotalCount": true,
"totalCountPath": "$['X-WP-Total']",
"pageUrlTemplate": "${url}?page=${pageNum}&per_page=${pageSize}&consumer_key=${requestParams.consumer_key}&consumer_secret=${requestParams.consumer_secret}"
},
"dataPath": "$.*",
"column": [
{
"name": "id",
"type": "long"
},
{
"name": "name",
"type": "string"
},
{
"name": "sku",
"type": "string"
},
{
"name": "price",
"type": "string"
},
{
"name": "stock_quantity",
"type": "long"
},
{
"name": "created_at",
"type": "string"
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "replace",
"username": "root",
"password": "123345678",
"column": [
"id",
"name",
"sku",
"price",
"stock_quantity",
"created_at"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://host.docker.internal:23306/inventory_v2?useUnicode=true&characterEncoding=utf-8",
"table": [
"products"
]
}
]
}
}
}
],
"setting": {
"speed": {
"channel": 1
}
}
}
}
4. 常见问题及解决方案
4.1 认证失败
问题:API 请求返回 401 Unauthorized
解决方案:
- 检查
consumer_key和consumer_secret是否正确 - 确保 API 用户具有足够的权限
- 检查 API 版本是否正确
4.2 分页失效
问题:只获取到部分数据,分页没有生效
解决方案:
- 检查分页类型配置是否正确
- 确保
pageUrlTemplate配置正确 - 检查
totalCount是否设置合理 - 启用
dynamicTotalCount动态获取总数据量
4.3 请求频率限制
问题:API 请求返回 429 Too Many Requests
解决方案:
- 减少每页请求的数据量
- 增加请求间隔时间
- 联系 Woocommerce 支持调整 API 速率限制
4.4 数据类型不匹配
问题:数据写入数据库时类型不匹配
解决方案:
- 检查 DataX 配置中的列类型与数据库表结构是否匹配
- 使用 DataX 的转换器功能进行数据类型转换
- 在读取阶段指定正确的数据类型
5. 性能优化建议
- 调整分页大小:根据 API 限制和网络状况调整
pageSize,建议设置为 API 允许的最大值(100) - 增加并发通道:在 DataX 作业配置中增加
channel数量,提高数据同步速度 - 使用增量同步:通过添加时间过滤条件,只同步新增或修改的数据
- 优化数据库写入:使用
insert或update模式替代replace模式,减少数据库操作开销 - 定期清理日志:定期清理 DataX 日志文件,避免磁盘空间不足