eBay API OAuth 认证流程

eBay 所有 API 调用都需要 OAuth 2.0 认证。本文详解从获取 access token 到刷新 token 的完整流程。

两种 Token 类型

类型用途有效期
Application Token只读访问(Browse、Taxonomy)2 小时
User Token读写访问(上架、订单管理)2 小时(可刷新)

一、获取 Application Token(最简单)

用于只读 API(Browse、Taxonomy),不需要用户授权,用 Client Credentials 模式直接获取。

POST https://api.ebay.com/identity/v1/oauth2/token

Headers:
  Content-Type: application/x-www-form-urlencoded
  Authorization: Basic base64(AppID:CertID)

Body:
  grant_type=client_credentials
  scope=https://api.ebay.com/oauth/api_scope

Node.js 示例:

import axios from 'axios';

async function getAppToken() {
  const auth = Buffer.from(APP_ID + ':' + CERT_ID).toString('base64');
  const resp = await axios.post(
    'https://api.ebay.com/identity/v1/oauth2/token',
    'grant_type=client_credentials&scope=https://api.ebay.com/oauth/api_scope',
    {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': 'Basic ' + auth,
      },
    }
  );
  return resp.data.access_token; // 有效期 2 小时
}

二、获取 User Token(需要用户授权)

用于读写 API(Inventory、Order、Fulfillment),需要走完整的 OAuth 2.0 授权码流程。

步骤 1:引导用户授权

GET https://auth.ebay.com/oauth2/authorize
  ?client_id=YOUR_APP_ID
  &redirect_uri=YOUR_CALLBACK_URL
  &response_type=code
  &scope=YOUR_SCOPES
  &state=RANDOM_STRING

步骤 2:用授权码换 Token

POST https://api.ebay.com/identity/v1/oauth2/token

Body:
  grant_type=authorization_code
  code=AUTH_CODE_FROM_STEP1
  redirect_uri=YOUR_CALLBACK_URL

步骤 3:刷新 Token

POST https://api.ebay.com/identity/v1/oauth2/token

Body:
  grant_type=refresh_token
  refresh_token=SAVED_REFRESH_TOKEN
  scope=YOUR_SCOPES

Token 管理最佳实践

  • Application Token 过期前 5 分钟刷新即可,不用太频繁
  • User Token 的 Refresh Token 要安全存储
  • 不要把 Token 写在前端代码里,只能在后端使用
  • scope 权限遵循最小化原则,只申请需要的

声明:本文为非官方中文教程。