# Amazon Selling Partner API 文档

## 1. 概述

Amazon Selling Partner API (SP-API) 是Amazon为卖家和开发者提供的开放API平台，旨在帮助卖家更高效地管理其在Amazon平台上的业务。通过SP-API，开发者可以创建各种工具和服务，帮助卖家处理产品管理、订单处理、库存管理等业务流程。

Amazon是全球最大的电子商务平台之一，其Selling Partner API提供了丰富的接口，支持卖家在全球多个Amazon站点上开展业务。

## 2. API分类

### 2.1 认证API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| Authorization API | 处理OAuth 2.0授权流程 | API认证、授权 |
| Tokens API | 获取和管理访问令牌 | 保持API访问权限 |

### 2.2 产品管理API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| Catalog Items API | 管理产品目录信息 | 产品管理、目录同步 |
| Listings Items API | 管理产品 listings | 商品上架、信息更新 |
| Product Type Definitions API | 获取产品类型定义 | 产品创建、属性管理 |

### 2.3 订单管理API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| Orders API | 管理订单信息 | 订单处理、订单同步 |
| Order Items API | 管理订单商品信息 | 订单详情、库存管理 |
| Order Reports API | 获取订单报告 | 订单分析、财务报表 |

### 2.4 库存管理API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| FBA Inventory API | 管理FBA库存 | 库存监控、库存管理 |
| Merchant Fulfillment API | 管理商家自配送 | 订单发货、物流管理 |
| Supply Sources API | 管理供应源 | 库存规划、供应链管理 |

### 2.5 价格管理API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| Pricing API | 管理产品价格 | 价格监控、动态定价 |
| Product Fees API | 获取产品费用信息 | 成本计算、定价策略 |

### 2.6 报告API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| Reports API | 获取各种业务报告 | 销售分析、库存分析 |
| Finances API | 获取财务报告 | 财务分析、会计集成 |
| Sales API | 获取销售数据 | 销售分析、业绩评估 |

### 2.7 卖家信息API

| 接口名称 | 功能描述 | 适用场景 |
|---------|---------|----------|
| Sellers API | 获取卖家信息 | 账户管理、权限控制 |
| Merchant Insights API | 获取商家洞察 | 业务分析、决策支持 |

## 3. API认证与授权

### 3.1 开发者注册流程

**注册地址**：[Amazon Developer Console](https://developer.amazon.com/)

**注册资格**：
- 企业开发者：需要提供企业营业执照、税务登记证等
- 个人开发者：需要提供个人身份证明
- 必须拥有Amazon卖家账号

**所需材料**：
1. 企业营业执照（企业开发者）
2. 税务登记证（企业开发者）
3. 法人身份证明
4. 联系方式（邮箱、电话）
5. Amazon卖家账号信息
6. 银行账户信息（用于收款）

**注册步骤**：
1. 访问Amazon Developer Console注册地址
2. 点击"Sign up"按钮，创建开发者账号
3. 填写注册信息，验证邮箱
4. 登录开发者控制台
5. 创建应用，获取Client ID和Client Secret
6. 设置应用回调地址
7. 配置IAM角色（用于服务器到服务器调用）
8. 获取测试环境访问权限

**注意事项**：
- 确保提供真实有效的信息
- 保护好Client ID和Client Secret，避免泄露
- 遵守Amazon的使用条款和限制
- 定期更新API密钥以保证安全
- 如遇到注册问题，可联系Amazon开发者支持

### 3.2 认证流程

1. 注册Amazon卖家账号
2. 在Amazon Developer Console创建应用并获取API密钥（Client ID和Client Secret）
3. 实现OAuth 2.0授权流程获取访问令牌
4. 使用访问令牌调用API接口

### 3.3 授权方式

- **OAuth 2.0授权**：基于标准的OAuth 2.0协议
- **IAM角色**：用于服务器到服务器的API调用
- **访问令牌**：有效期为1小时
- **刷新令牌**：用于获取新的访问令牌

## 4. API调用示例

### 4.1 获取访问令牌示例

```python
import requests

def get_access_token(client_id, client_secret, refresh_token):
    url = "https://api.amazon.com/auth/o2/token"
    
    payload = {
        "grant_type": "refresh_token",
        "client_id": client_id,
        "client_secret": client_secret,
        "refresh_token": refresh_token
    }
    
    headers = {
        "Content-Type": "application/x-www-form-urlencoded"
    }
    
    response = requests.post(url, data=payload, headers=headers)
    return response.json()
```

### 4.2 订单列表查询示例

```python
import requests

def get_orders(access_token, marketplace_ids, created_after, limit=10):
    url = "https://sellingpartnerapi-na.amazon.com/orders/v0/orders"
    
    params = {
        "MarketplaceIds": marketplace_ids,
        "CreatedAfter": created_after,
        "Limit": limit
    }
    
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json",
        "x-amz-access-token": access_token
    }
    
    response = requests.get(url, params=params, headers=headers)
    return response.json()
```

### 4.3 产品上传示例

```python
import requests
import json

def create_product_listing(access_token, marketplace_id, product_data):
    url = f"https://sellingpartnerapi-na.amazon.com/listings/2021-08-01/items/{marketplace_id}"
    
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json",
        "x-amz-access-token": access_token
    }
    
    response = requests.post(url, json=product_data, headers=headers)
    return response.json()
```

## 5. API返回值解析

### 5.1 访问令牌API返回值

| 字段名 | 类型 | 描述 |
|-------|------|------|
| access_token | String | 访问令牌 |
| token_type | String | 令牌类型，通常为"Bearer" |
| expires_in | Number | 令牌过期时间（秒） |
| refresh_token | String | 刷新令牌 |

### 5.2 订单API返回值

| 字段名 | 类型 | 描述 |
|-------|------|------|
| AmazonOrderId | String | Amazon订单ID |
| PurchaseDate | String | 订单购买日期 |
| LastUpdateDate | String | 订单最后更新日期 |
| OrderStatus | String | 订单状态 |
| FulfillmentChannel | String | 配送渠道 |
| SalesChannel | String | 销售渠道 |
| OrderTotal | Object | 订单总金额 |
| ShippingAddress | Object | 配送地址 |
| BuyerInfo | Object | 买家信息 |
| OrderItems | Array | 订单商品列表 |

### 5.3 产品API返回值

| 字段名 | 类型 | 描述 |
|-------|------|------|
| ASIN | String | Amazon标准识别号 |
| SKU | String | 卖家SKU |
| Title | String | 产品标题 |
| Price | Object | 价格信息 |
| Description | String | 产品描述 |
| Images | Array | 产品图片URL列表 |
| Attributes | Object | 产品属性 |
| Status | String | 产品状态 |

### 5.4 错误码定义

| 错误码 | 错误消息 | 可能原因 | 解决方法 |
|-------|---------|---------|----------|
| 400 | Bad Request | 请求参数错误 | 检查请求参数是否符合要求 |
| 401 | Unauthorized | 认证失败 | 检查API密钥和访问令牌是否正确 |
| 403 | Forbidden | 权限不足 | 检查应用是否有相应的权限 |
| 404 | Not Found | 资源不存在 | 检查请求的资源ID是否正确 |
| 429 | Too Many Requests | 请求频率过高 | 减少API调用频率，实现限流机制 |
| 500 | Internal Server Error | 服务器内部错误 | 稍后重试，如持续失败联系平台支持 |
| 503 | Service Unavailable | 服务不可用 | 稍后重试，检查Amazon服务状态 |
| 4001 | Invalid Marketplace ID | 无效的市场ID | 检查Marketplace ID是否正确 |
| 4002 | Invalid SKU | 无效的SKU | 检查产品SKU是否存在 |
| 4003 | Invalid ASIN | 无效的ASIN | 检查ASIN是否正确 |
| 4004 | Order Not Found | 订单不存在 | 检查订单ID是否正确 |
| 4005 | Inventory Not Available | 库存不可用 | 检查库存水平，确保有足够库存 |

## 6. 最佳实践

### 6.1 API调用频率限制

- 遵守Amazon的API调用频率限制
- 使用批量操作减少API请求次数
- 实现指数退避策略处理限流

### 6.2 错误处理

- 正确处理API返回的错误码
- 实现重试机制处理临时错误
- 监控API调用成功率

### 6.3 安全措施

- 保护API密钥和访问令牌
- 使用HTTPS协议进行API调用
- 定期更新访问令牌
- 限制API密钥的权限范围

### 6.4 安全最佳实践

- **API密钥保护**：
  - 不要在代码中硬编码Client ID和Client Secret
  - 使用环境变量或安全的配置管理系统存储API密钥
  - 定期更换API密钥
  - 限制API密钥的使用范围

- **访问令牌管理**：
  - 妥善存储访问令牌和刷新令牌
  - 设置合理的令牌过期时间
  - 实现令牌自动刷新机制
  - 避免在客户端存储敏感令牌

- **请求安全**：
  - 始终使用HTTPS协议进行API调用
  - 正确生成和验证请求签名
  - 避免在URL中传递敏感信息
  - 实现请求超时和重试机制

- **权限控制**：
  - 仅申请必要的API权限
  - 定期审查应用的权限设置
  - 对不同环境使用不同的API密钥
  - 配置适当的IAM角色权限

- **数据安全**：
  - 加密存储用户数据
  - 避免传输敏感信息
  - 实现数据访问控制
  - 定期备份重要数据

### 6.5 性能优化

- 合理使用缓存减少API调用
- 批量处理提高效率
- 优化请求参数减少响应数据大小
- 使用适当的API版本

## 7. 接口使用场景分析

### 7.1 电商ERP系统集成

- **产品管理**：批量上传、更新产品信息
- **订单处理**：自动同步订单、批量发货
- **库存管理**：实时同步库存信息
- **价格管理**：动态调整价格
- **数据分析**：获取销售数据进行分析

### 7.2 库存管理系统

- **库存同步**：实时更新库存信息
- **库存监控**：监控库存水平，避免缺货
- **库存预测**：基于销售数据预测库存需求
- **FBA库存管理**：管理Amazon物流中心的库存

### 7.3 价格优化工具

- **价格监控**：监控竞争对手价格
- **动态定价**：根据市场情况自动调整价格
- **促销管理**：创建和管理促销活动
- **成本计算**：基于产品费用信息计算成本

## 8. 总结

Amazon Selling Partner API为卖家和开发者提供了丰富的接口，涵盖了认证、产品管理、订单管理、库存管理、价格管理和报告等各个方面。通过合理使用这些API，开发者可以创建各种工具和服务，帮助卖家提高运营效率、提升销售业绩。

在使用Amazon API时，开发者需要注意遵守平台的使用规则，合理控制API调用频率，确保数据安全，并不断优化API调用策略，以获得最佳的使用效果。

## 9. 参考资源

- [Amazon Selling Partner API Documentation](https://developer-docs.amazon.com/sp-api/)
- [Amazon Developer Console](https://developer.amazon.com/)
- [Amazon Seller Central](https://sellercentral.amazon.com/)