DEV Community

Cover image for วิธีใช้ eBay API
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีใช้ eBay API

สรุปโดยย่อ

API ของ eBay ช่วยให้คุณจัดการสินค้าคงคลัง รายการสินค้า คำสั่งซื้อ และการชำระเงินในตลาดออนไลน์ระดับโลก คุณจะต้องยืนยันตัวตนด้วย OAuth 2.0 เรียกใช้ endpoint api.ebay.com/sell และจัดการกับ rate limits อย่างรอบคอบ สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบข้อมูลรายการสินค้า ทดสอบกระบวนการจัดการคำสั่งซื้อ และตรวจสอบให้แน่ใจว่าการเชื่อมต่อของคุณรองรับข้อจำกัดของ API ได้อย่างไม่มีสะดุด

ทดลองใช้ Apidog วันนี้

บทนำ

eBay เชื่อมโยงผู้ซื้อและผู้ขายทั่วโลก API ช่วยให้ผู้ขายสามารถจัดการสินค้าคงคลังโดยอัตโนมัติ สร้างรายการสินค้าจำนวนมาก ประมวลผลคำสั่งซื้อ จัดการการจัดส่ง และการคืนสินค้า เหมาะทั้งผู้ขายรายเล็กและองค์กรขนาดใหญ่

ส่วนหลักของ API:

  • Inventory API - จัดการสินค้าคงคลัง
  • Listing API - สร้างและจัดการรายการสินค้า
  • Order API - ประมวลผลคำสั่งซื้อและการจัดส่ง
  • Fulfillment API - จัดการการจัดส่งและการติดตาม
  • Analytics API - ดึงรายงานการขาย

💡 หากคุณกำลังสร้างการผสานรวมกับ eBay, Apidog ช่วยทดสอบการสร้างรายการสินค้า ตรวจสอบความถูกต้องของข้อมูลคำสั่งซื้อ และช่วยให้แน่ใจว่าระบบของคุณรับมือกับ rate limits และข้อผิดพลาดได้ถูกต้อง

ทดสอบ API ของ eBay ด้วย Apidog - ฟรี

เมื่อจบคู่มือนี้ คุณจะสามารถ:

  • ยืนยันตัวตนด้วย eBay OAuth 2.0
  • สร้างและจัดการสินค้าคงคลัง
  • เผยแพร่รายการสินค้า
  • ประมวลผลคำสั่งซื้อและการจัดส่ง
  • จัดการการคืนสินค้าและการคืนเงิน
  • ทดสอบด้วย Apidog

การยืนยันตัวตนด้วย OAuth 2.0

eBay ใช้ OAuth 2.0 สำหรับการยืนยันตัวตน API ต้องสร้างแอปใน eBay Developers Program

image-234.png

สร้างแอปพลิเคชัน

  1. ไปที่ developers.ebay.com
  2. สมัครบัญชีนักพัฒนา
  3. สร้างแอปใน Developer Console
  4. รับ App ID (client ID) และ Cert ID (client secret)

ขั้นตอน OAuth

ขั้นตอนที่ 1: ขออนุญาตจากผู้ใช้

https://auth.ebay.com/oauth2/authorize?
  client_id=YOUR_APP_ID&
  response_type=code&
  redirect_uri=YOUR_SIGNIN_REDIRECT_URI&
  scope=https://api.ebay.com/oauth/api_scope/sell.inventory
Enter fullscreen mode Exit fullscreen mode

ขั้นตอนที่ 2: รับรหัสการอนุญาต

ผู้ใช้อนุญาตแล้วจะ redirect กลับมาพร้อม authorization code

ขั้นตอนที่ 3: แลก code เป็น access token

const response = await fetch('https://api.ebay.com/identity/v1/oauth2/token', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Basic ' + Buffer.from(APP_ID + ':' + CERT_ID).toString('base64')
  },
  body: new URLSearchParams({
    grant_type: 'authorization_code',
    code: AUTHORIZATION_CODE,
    redirect_uri: 'YOUR_SIGNIN_REDIRECT_URI'
  })
})

const { access_token, refresh_token, expires_in } = await response.json()
Enter fullscreen mode Exit fullscreen mode

สโคปที่จำเป็น

  • https://api.ebay.com/oauth/api_scope/sell.inventory - จัดการสินค้าคงคลัง
  • https://api.ebay.com/oauth/api_scope/sell.listings - รายการสินค้า
  • https://api.ebay.com/oauth/api_scope/sell.orders - คำสั่งซื้อ
  • https://api.ebay.com/oauth/api_scope/sell.fulfillment - การดำเนินการจัดส่ง
  • https://api.ebay.com/oauth/api_scope/sell.account - การจัดการบัญชี

การจัดการสินค้าคงคลัง

สินค้าคงคลังคือตัวแทนของสินค้าที่คุณขาย

สร้างสถานที่เก็บสินค้าคงคลัง

curl -X POST "https://api.ebay.com/sell/inventory/v1/location_inventory_location" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "locationId": "WAREHOUSE_1",
    "name": "Main Warehouse",
    "address": {
      "addressLine1": "123 Main St",
      "city": "San Jose",
      "stateOrProvince": "CA",
      "postalCode": "95101",
      "countryCode": "US"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

สร้างรายการสินค้าคงคลัง

curl -X POST "https://api.ebay.com/sell/inventory/v1/inventory_item" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "product": {
      "title": "Vintage Leather Messenger Bag",
      "description": "Genuine leather messenger bag, perfect for work or school.",
      "aspects": {
        "Brand": ["Vintage"],
        "Material": ["Leather"],
        "Color": ["Brown"]
      },
      "imageUrls": [
        "https://example.com/images/bag1.jpg",
        "https://example.com/images/bag2.jpg"
      ]
    },
    "condition": "USED_GOOD",
    "conditionNotes": "Minor wear on corners",
    "availability": {
      "shipToLocationAvailability": {
        "quantity": 25
      }
    }
  }'
Enter fullscreen mode Exit fullscreen mode

อัปเดตสินค้าคงคลัง

curl -X PUT "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "availability": {
      "shipToLocationAvailability": {
        "quantity": 30
      }
    }
  }'
Enter fullscreen mode Exit fullscreen mode

รับรายการสินค้าคงคลัง

curl -X GET "https://api.ebay.com/sell/inventory/v1/inventory_item/SKU123" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

การลงรายการสินค้า

สร้างข้อเสนอ

curl -X POST "https://api.ebay.com/sell/inventory/v1/offer" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": "SKU123",
    "marketplaceId": "EBAY_US",
    "format": "FIXED_PRICE",
    "product": {
      "title": "Vintage Leather Messenger Bag"
    },
    "pricingSummary": {
      "price": {
        "currency": "USD",
        "value": "89.99"
      }
    },
    "listing": {
      "listingDuration": "GTC",
      "listingType": "CLASSIC"
    },
    " fulfillment": {
      "shippingProfileId": "SHIPPING_PROFILE_ID",
      " fulfillmentPolicyId": "FULFILLMENT_POLICY_ID",
      "paymentPolicyId": "PAYMENT_POLICY_ID"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

ฟิลด์สำคัญ:

  • sku - SKU สินค้าคงคลัง
  • marketplaceId - EBAY_US, EBAY_UK, EBAY_DE, ฯลฯ
  • format - FIXED_PRICE หรือ AUCTION
  • listingDuration - ระยะเวลา (GTC = ดีจนกว่าจะยกเลิก)
  • price - ราคาขาย

เผยแพร่ข้อเสนอ

curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/publish" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

ถอนรายการสินค้า

curl -X POST "https://api.ebay.com/sell/inventory/v1/offer/OFFER_ID/withdraw" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

การจัดการคำสั่งซื้อ

รับคำสั่งซื้อ

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order?orderIds=ORDER_ID_1,ORDER_ID_2" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

กรองตามวันที่:

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order?filter=creation_date_range:from:2026-01-01T00:00:00Z,to:2026-03-24T00:00:00Z" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

รับรายละเอียดคำสั่งซื้อ

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างคำตอบ:

{
  "orderId": "12-34567-89012",
  "orderPaymentStatus": "PAID",
  "pricingSummary": {
    "total": {
      "currency": "USD",
      "value": "94.99"
    }
  },
  "fulfillmentStartInstructions": [
    {
      "shippingStep": {
        "shipTo": {
          "fullName": "John Doe",
          "contactAddress": {
            "addressLine1": "123 Main St",
            "city": "Anytown",
            "stateOrProvince": "CA",
            "postalCode": "12345",
            "countryCode": "US"
          }
        }
      "lineItems": [
        {
          "lineItemId": "LINE_ITEM_ID",
          "sku": "SKU123",
          "quantity": 1,
          "title": "Vintage Leather Messenger Bag",
          "lineItemCost": {
            "currency": "USD",
            "value": "89.99"
          }
        }
      ]
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

การจัดส่งและการดำเนินการจัดส่ง

สร้างฉลากการจัดส่ง

curl -X POST "https://api.ebay.com/sell/fulfillment/v1/order/ORDER_ID/shipping_fulfillment" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "lineItems": [
      {
        "lineItemId": "LINE_ITEM_ID",
        "quantity": 1
      }
    ],
    "shippingStep": {
      "shipFrom": {
        "fullName": "Your Name",
        "companyName": "Your Company",
        "contactAddress": {
          "addressLine1": "456 Warehouse Rd",
          "city": "San Jose",
          "stateOrProvince": "CA",
          "postalCode": "95101",
          "countryCode": "US"
        }
      }
    },
    "shippingCarrierCode": "USPS",
    "shippingMethodCode": "PRIORITY_MAIL",
    "trackingNumber": "9400111899223056789012"
  }'
Enter fullscreen mode Exit fullscreen mode

ผู้ให้บริการขนส่งที่รองรับ: USPS, UPS, FedEx, DHL

การจัดการการคืนสินค้า

รับรายละเอียดการคืนสินค้า

curl -X GET "https://api.ebay.com/sell/fulfillment/v1/return/RETURN_ID" \
  -H "Authorization: Bearer ACCESS_TOKEN"
Enter fullscreen mode Exit fullscreen mode

ดำเนินการคืนสินค้า

curl -X POST "https://api.ebay.com/sell/fulfillment/v1/return/RETURN_ID/decide" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "decision": "ACCEPT",
    "shipment": {
      "carrierId": "CARRIER_ID",
      "trackingNumber": "TRACKING_NUMBER"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

ข้อจำกัดอัตรา (Rate limits) และการจัดการ

eBay จำกัดการเรียก API ต่อช่วงเวลา ป้องกันการใช้งานเกินกำหนด ตรวจสอบ headers:

  • X-RateLimit-Limit - จำนวนคำขอสูงสุด
  • X-RateLimit-Remaining - คำขอที่เหลือในช่วงเวลา
  • X-RateLimit-Reset - Unix timestamp เมื่อ reset

ตัวอย่างโค้ด handle rate limit:

async function makeEbayRequest(url, options, retries = 3) {
  for (let i = 0; i < retries; i++) {
    const response = await fetch(url, options)

    const remaining = response.headers.get('X-RateLimit-Remaining')
    if (remaining && parseInt(remaining) < 10) {
      console.warn('Rate limit low:', remaining)
    }

    if (response.status === 429) {
      const resetTime = response.headers.get('X-RateLimit-Reset')
      const waitTime = (parseInt(resetTime) - Date.now() / 1000) * 1000
      await sleep(waitTime)
      continue
    }

    return response
  }
  throw new Error('Rate limited')
}
Enter fullscreen mode Exit fullscreen mode

การทดสอบด้วย Apidog

API ของ eBay มีความสำคัญต่อการใช้งานจริง ควรทดสอบให้ครอบคลุมก่อนใช้งานจริง

image-235.png

1. การตั้งค่าสภาพแวดล้อม

EBAY_APP_ID: your_app_id
EBAY_CERT_ID: your_cert_id
EBAY_ACCESS_TOKEN: stored_token
EBAY_REFRESH_TOKEN: stored_refresh
EBAY_MARKETPLACE_ID: EBAY_US
BASE_URL: https://api.ebay.com
Enter fullscreen mode Exit fullscreen mode

2. ตรวจสอบความถูกต้องของข้อมูลรายการสินค้า

pm.test('Listing has required fields', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  pm.expect(requestBody).to.have.property('sku')
  pm.expect(requestBody).to.have.property('marketplaceId')
  pm.expect(requestBody.pricingSummary).to.have.property('price')
})

pm.test('Price is valid', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  const price = parseFloat(requestBody.pricingSummary.price.value)
  pm.expect(price).to.be.above(0)
})
Enter fullscreen mode Exit fullscreen mode

3. ทดสอบกระบวนการจัดการคำสั่งซื้อ

pm.test('Order response is valid', () => {
  const response = pm.response.json()
  pm.expect(response).to.have.property('orderId')
  pm.expect(response.orderPaymentStatus).to.eql('PAID')
  pm.expect(response.lineItems).to.be.an('array')
})
Enter fullscreen mode Exit fullscreen mode

ทดสอบ API ของ eBay ด้วย Apidog - ฟรี

ข้อผิดพลาดทั่วไปและการแก้ไข

401 ไม่ได้รับอนุญาต (Unauthorized)

สาเหตุ: โทเค็นหมดอายุหรือไม่ถูกต้อง

วิธีแก้ไข: ใช้ refresh token เพื่อขอ access token ใหม่

const response = await fetch('https://api.ebay.com/identity/v1/oauth2/token', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Basic ' + Buffer.from(APP_ID + ':' + CERT_ID).toString('base64')
  },
  body: new URLSearchParams({
    grant_type: 'refresh_token',
    refresh_token: storedRefreshToken
  })
})
Enter fullscreen mode Exit fullscreen mode

10002: Access token ไม่ถูกต้อง

สาเหตุ: Access token หมดอายุ

วิธีแก้ไข: รีเฟรชโทเค็นทันที

21916684: รายการสินค้าไม่มีอยู่จริง

สาเหตุ: อัปเดต SKU ที่ยังไม่ได้สร้าง

วิธีแก้ไข: สร้างสินค้าคงคลังก่อน แล้วค่อยสร้างข้อเสนอ

10003: SKU ไม่ถูกต้อง

สาเหตุ: รูปแบบ SKU ไม่ถูกต้อง

วิธีแก้ไข: SKU ต้องไม่ซ้ำกัน ใช้อักษร/ตัวเลข ขีดกลาง หรือขีดล่างเท่านั้น

ข้อจำกัดอัตรา (Rate limit) (429)

สาเหตุ: ส่งคำขอเกินกำหนด

วิธีแก้ไข: ใช้วิธี backoff rate limit ของ eBay แตกต่างกันแต่ละ endpoint

ทางเลือกและการเปรียบเทียบ

คุณสมบัติ eBay Amazon SP-API Etsy
API สินค้าคงคลัง จำกัด
API รายการสินค้า
API คำสั่งซื้อ
API การดำเนินการจัดส่ง จำกัด
แผนฟรี โปรแกรมสำหรับนักพัฒนา จำกัด จำกัด
ความซับซ้อนของ API ปานกลาง สูง ต่ำ

API ของ eBay ใช้งานง่ายกว่า Amazon แต่ฟีเจอร์น้อยกว่า Etsy เหมาะกับผู้ขายทุกระดับ

กรณีใช้งานจริง

การขายแบบหลายช่องทาง (Multi-channel selling): ขายสินค้าบน eBay, Amazon และเว็บตัวเอง สินค้าคงคลังซิงค์ทุกช่องทางแบบอัตโนมัติ

การปรับราคาอัตโนมัติ (Automated repricing): ดึงราคาคู่แข่งทาง API เมื่อคู่แข่งลดราคา ระบบปรับราคาของคุณอัตโนมัติให้แข่งขันได้

การลงรายการสินค้าจำนวนมาก (Bulk listing): อัปโหลดไฟล์ CSV เพื่อสร้างรายการสินค้าหลายพันรายการในครั้งเดียว

บทสรุป

สิ่งที่ควรนำไปใช้:

  • ยืนยันตัวตน OAuth 2.0 ด้วยข้อมูลแอป
  • จัดการสินค้าคงคลังด้วย SKU
  • สร้าง/เผยแพร่รายการสินค้า
  • ประมวลผลคำสั่งซื้อและจัดส่ง
  • จัดการการคืนสินค้า
  • ทดสอบด้วย Apidog ก่อนใช้งานจริง

ขั้นตอนถัดไป:

  1. สมัคร eBay Developers Program
  2. สร้างแอปและรับข้อมูลรับรอง
  3. ดำเนินการตามขั้นตอน OAuth
  4. สร้างสินค้าคงคลังแรกของคุณ
  5. เผยแพร่รายการทดสอบ

ทดสอบ API ของ eBay ด้วย Apidog - ฟรี

คำถามที่พบบ่อย

ฉันจำเป็นต้องมีบัญชีธุรกิจเพื่อใช้ API หรือไม่?

ใช่ ต้องลงทะเบียนบัญชีผู้ขายและยืนยันตัวตน

สินค้าคงคลัง (inventory) กับข้อเสนอ (offers) ต่างกันอย่างไร?

สินค้าคงคลัง = ข้อมูลผลิตภัณฑ์ (ชื่อ, รายละเอียด, รูปภาพ)

ข้อเสนอ = เชื่อมสินค้าคงคลังเข้าตลาด พร้อมราคา/การจัดส่ง ข้อเสนอหลายรายการอ้างถึงสินค้าคงคลังเดียวกันได้

รายการสินค้าจะยังคงใช้งานได้นานแค่ไหน?

ถ้า GTC (ดีจนกว่าจะยกเลิก) จะอยู่จนกว่าจะถอนหรือสินค้าหมด

สามารถขายสินค้าระหว่างประเทศผ่าน API ได้หรือไม่?

ได้ ตั้งค่า marketplaceId ตามประเทศ (เช่น EBAY_US, EBAY_UK ฯลฯ)

ข้อจำกัดอัตรา (rate limit) ของ API คือ?

แตกต่างกันแต่ละ endpoint และระดับบัญชี ตรวจสอบ response headers

จะรับฉลากการจัดส่งได้อย่างไร?

eBay มีฉลากขนส่งราคาพิเศษผ่าน Fulfillment API สร้างการจัดส่งแล้วรับฉลากได้ทันที

Top comments (0)