marketplace-connectors
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMarketplace Connectors
Marketplace 连接器
Overview
概述
Selling across Amazon, eBay, and Walmart Marketplace multiplies your sales channel reach but introduces operational complexity: each marketplace has its own product data model, listing requirements, order lifecycle, and inventory management API. This skill covers connecting your store to major marketplaces — using apps for managed platforms and direct API integration for custom storefronts.
在亚马逊、eBay和沃尔玛 Marketplace 上销售能够扩大你的销售渠道覆盖范围,但也会带来运营复杂性:每个平台都有自己的商品数据模型、上架要求、订单生命周期和库存管理API。本技能涵盖如何将你的店铺与主流电商平台连接——对于托管平台使用应用程序,对于自定义店铺则使用直接API集成。
When to Use This Skill
适用场景
- When expanding sales channels beyond your own storefront to major marketplace platforms
- When building a multichannel commerce system that keeps inventory in sync across channels
- When automating order imports from marketplaces into your OMS or ERP
- When existing marketplace feeds are manual (spreadsheet uploads) and need automation
- 当你希望将销售渠道从自有店铺扩展至主流电商平台时
- 当你构建跨渠道电商系统,需要在各渠道间保持库存同步时
- 当你需要将平台订单自动导入至订单管理系统(OMS)或企业资源规划系统(ERP)时
- 当现有平台商品上传为手动操作(如表格上传),需要实现自动化时
Core Instructions
核心操作指南
Step 1: Determine your platform and recommended approach
步骤1:确定你的平台及推荐方案
| Platform | Recommended Approach | Key Apps |
|---|---|---|
| Shopify | Use a marketplace app — no custom code needed | Codisto ($39/month) for Amazon + eBay + Walmart; LitCommerce ($19/month) for multi-channel listing management |
| WooCommerce | Use a plugin for standard integrations | WooCommerce Amazon Fulfillment (free, amazon.com) for FBA; WP-Lister Pro for Amazon ($99) for full listing and order management |
| BigCommerce | Use App Marketplace connectors | Sellbrite ($79/month, marketplace.bigcommerce.com) syncs Amazon, eBay, Walmart, and Etsy; ChannelAdvisor for enterprise multi-channel |
| Custom / Headless | Direct API integration | Build using Amazon SP-API, eBay REST API, and Walmart Marketplace API; use a queue for order imports and inventory sync |
| 平台 | 推荐方案 | 核心应用 |
|---|---|---|
| Shopify | 使用电商平台应用——无需自定义代码 | Codisto(39美元/月)支持亚马逊+eBay+沃尔玛;LitCommerce(19美元/月)用于多渠道商品上架管理 |
| WooCommerce | 使用插件实现标准集成 | WooCommerce Amazon Fulfillment(免费,amazon.com)支持亚马逊物流(FBA);WP-Lister Pro for Amazon(99美元)用于完整的商品上架和订单管理 |
| BigCommerce | 使用应用市场连接器 | Sellbrite(79美元/月,marketplace.bigcommerce.com)同步亚马逊、eBay、沃尔玛和Etsy的商品;ChannelAdvisor适用于企业级多渠道管理 |
| 自定义/无头商店 | 直接API集成 | 基于Amazon SP-API、eBay REST API和Walmart Marketplace API进行开发;使用队列处理订单导入和库存同步 |
Step 2: Platform-specific marketplace setup
步骤2:平台专属电商平台设置
Shopify
Shopify
Connect Amazon with Codisto:
- Install Codisto from the Shopify App Store ($39/month for Amazon + eBay)
- Connect your Amazon Seller Central account (US, UK, EU, AU supported)
- In Codisto, go to Listings → Amazon and click Link Products — it matches your Shopify products to existing ASINs or creates new listings
- Enable Inventory Sync to update Amazon quantities automatically when Shopify inventory changes
- Enable Order Import — Codisto imports Amazon orders as Shopify orders so you manage fulfillment from one place
Important before listing:
- Set a safety stock buffer in Codisto settings: reserve 10–20% of your Shopify inventory from marketplaces to avoid oversells if sync lags
- Configure marketplace-specific pricing in Codisto to account for Amazon fees (15% referral fee + FBA fees) — list at a higher price than your Shopify store
通过Codisto连接亚马逊:
- 从Shopify应用商店安装Codisto(亚马逊+eBay版本39美元/月)
- 连接你的亚马逊卖家中心账户(支持美国、英国、欧盟、澳大利亚站点)
- 在Codisto中进入Listings → Amazon,点击Link Products——该功能会将你的Shopify商品与现有ASIN匹配,或创建新的商品列表
- 启用Inventory Sync,当Shopify库存变化时自动更新亚马逊库存数量
- 启用Order Import——Codisto会将亚马逊订单导入为Shopify订单,让你可以在同一平台管理履约
上架前注意事项:
- 在Codisto设置中设置安全库存缓冲:预留Shopify库存的10–20%不对外展示,避免因同步延迟导致超卖
- 在Codisto中配置平台专属定价,考虑亚马逊的费用(15%佣金+FBA费用)——上架价格应高于你的Shopify店铺价格
WooCommerce
WooCommerce
Connect Amazon with WP-Lister Pro:
- Purchase and install WP-Lister Pro for Amazon ($99 from wp-lister.com)
- Go to WP-Lister → Settings → Amazon and enter your Amazon Marketplace Web Service (MWS) credentials
- In WP-Lister → Products, select products to list and configure ASIN matching or create new listings
- Enable Auto-sync inventory — WP-Lister updates Amazon quantities when WooCommerce stock changes
- Enable Import Amazon orders — orders appear in WooCommerce automatically
For eBay with WooCommerce:
- Install WP-Lister Pro for eBay ($99) — same workflow as Amazon version
- Connect via eBay API credentials in WP-Lister settings
- Configure category mapping between your WooCommerce categories and eBay categories
通过WP-Lister Pro连接亚马逊:
- 购买并安装WP-Lister Pro for Amazon(99美元,wp-lister.com)
- 进入WP-Lister → Settings → Amazon,输入你的亚马逊Marketplace Web Service(MWS)凭证
- 在WP-Lister → Products中选择要上架的商品,配置ASIN匹配或创建新的商品列表
- 启用Auto-sync inventory——当WooCommerce库存变化时,WP-Lister会更新亚马逊库存数量
- 启用Import Amazon orders——订单会自动显示在WooCommerce中
WooCommerce连接eBay:
- 安装WP-Lister Pro for eBay(99美元)——操作流程与亚马逊版本一致
- 在WP-Lister设置中通过eBay API凭证完成连接
- 配置WooCommerce分类与eBay分类的映射关系
BigCommerce
BigCommerce
Connect Amazon, eBay, and Walmart with Sellbrite:
- Install Sellbrite from the BigCommerce App Marketplace ($79/month)
- Connect your marketplace seller accounts (Amazon, eBay, Walmart) and your BigCommerce store
- Sellbrite pulls your BigCommerce product catalog and syncs listings to all connected marketplaces
- Set inventory buffer rules per channel (e.g., reserve 5 units for your BigCommerce store)
- Configure automatic order import — marketplace orders appear in BigCommerce for unified fulfillment
通过Sellbrite连接亚马逊、eBay和沃尔玛:
- 从BigCommerce应用市场安装Sellbrite(79美元/月)
- 连接你的电商平台卖家账户(亚马逊、eBay、沃尔玛)和BigCommerce店铺
- Sellbrite会拉取你的BigCommerce商品目录,并同步至所有已连接的平台
- 为每个渠道设置库存缓冲规则(例如,为BigCommerce店铺预留5件库存)
- 配置自动订单导入——平台订单会显示在BigCommerce中,实现统一履约管理
Custom / Headless
自定义/无头商店
Amazon SP-API authentication:
typescript
// lib/amazon/auth.ts — LWA OAuth token with caching
let tokenCache: { accessToken: string; expiresAt: number } | null = null;
export async function getAccessToken(): Promise<string> {
if (tokenCache && tokenCache.expiresAt > Date.now() + 60000) return tokenCache.accessToken;
const res = await fetch('https://api.amazon.com/auth/o2/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'refresh_token',
refresh_token: process.env.AMAZON_REFRESH_TOKEN!,
client_id: process.env.AMAZON_CLIENT_ID!,
client_secret: process.env.AMAZON_CLIENT_SECRET!,
}),
});
const data = await res.json();
tokenCache = { accessToken: data.access_token, expiresAt: Date.now() + data.expires_in * 1000 };
return tokenCache.accessToken;
}Update Amazon inventory (SP-API Listings Items):
typescript
export async function updateAmazonInventory(sellerId: string, sku: string, quantity: number) {
const accessToken = await getAccessToken();
// SP-API also requires AWS Signature V4 — use @smithy/signature-v4
return fetch(`https://sellingpartnerapi-na.amazon.com/listings/2021-08-01/items/${sellerId}/${encodeURIComponent(sku)}`, {
method: 'PATCH',
headers: { 'x-amz-access-token': accessToken, 'Content-Type': 'application/json' },
body: JSON.stringify({
productType: 'PRODUCT',
patches: [{ op: 'replace', path: '/attributes/fulfillment_availability', value: [{
fulfillment_channel_code: 'DEFAULT',
quantity,
marketplace_id: 'ATVPDKIKX0DER', // US marketplace
}] }],
}),
});
}Import Amazon orders (polling every 5 minutes):
typescript
export async function pollAmazonOrders() {
const lastPolledAt = await db.syncState.getLastPolled('amazon') ?? new Date(Date.now() - 3_600_000);
const accessToken = await getAccessToken();
const params = new URLSearchParams({
MarketplaceIds: 'ATVPDKIKX0DER',
CreatedAfter: lastPolledAt.toISOString(),
OrderStatuses: 'Unshipped,PartiallyShipped',
});
const res = await fetch(`https://sellingpartnerapi-na.amazon.com/orders/v0/orders?${params}`, {
headers: { 'x-amz-access-token': accessToken },
});
const { payload } = await res.json();
for (const amazonOrder of payload.Orders ?? []) {
// Idempotent: skip if already imported
if (await db.orders.findByExternalId(amazonOrder.AmazonOrderId)) continue;
await orderQueue.add('import-order', {
externalId: amazonOrder.AmazonOrderId,
channel: 'amazon',
// ...map order fields
}, { jobId: `amazon-${amazonOrder.AmazonOrderId}` });
}
await db.syncState.updateLastPolled('amazon', new Date());
}Sync inventory across all channels when stock changes:
typescript
export async function syncInventoryAcrossChannels(sku: string, quantity: number, source: string) {
const tasks = [];
if (source !== 'amazon') {
tasks.push(updateAmazonInventory(process.env.AMAZON_SELLER_ID!, sku, quantity)
.catch(err => console.error(`Amazon sync failed for ${sku}:`, err)));
}
if (source !== 'ebay') {
tasks.push(ebayClient.updateInventoryItem(sku, quantity)
.catch(err => console.error(`eBay sync failed for ${sku}:`, err)));
}
// Run all syncs in parallel; individual failures logged but don't block others
await Promise.allSettled(tasks);
}Amazon SP-API认证:
typescript
// lib/amazon/auth.ts — LWA OAuth token with caching
let tokenCache: { accessToken: string; expiresAt: number } | null = null;
export async function getAccessToken(): Promise<string> {
if (tokenCache && tokenCache.expiresAt > Date.now() + 60000) return tokenCache.accessToken;
const res = await fetch('https://api.amazon.com/auth/o2/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'refresh_token',
refresh_token: process.env.AMAZON_REFRESH_TOKEN!,
client_id: process.env.AMAZON_CLIENT_ID!,
client_secret: process.env.AMAZON_CLIENT_SECRET!,
}),
});
const data = await res.json();
tokenCache = { accessToken: data.access_token, expiresAt: Date.now() + data.expires_in * 1000 };
return tokenCache.accessToken;
}更新亚马逊库存(SP-API Listings Items):
typescript
export async function updateAmazonInventory(sellerId: string, sku: string, quantity: number) {
const accessToken = await getAccessToken();
// SP-API also requires AWS Signature V4 — use @smithy/signature-v4
return fetch(`https://sellingpartnerapi-na.amazon.com/listings/2021-08-01/items/${sellerId}/${encodeURIComponent(sku)}`, {
method: 'PATCH',
headers: { 'x-amz-access-token': accessToken, 'Content-Type': 'application/json' },
body: JSON.stringify({
productType: 'PRODUCT',
patches: [{ op: 'replace', path: '/attributes/fulfillment_availability', value: [{
fulfillment_channel_code: 'DEFAULT',
quantity,
marketplace_id: 'ATVPDKIKX0DER', // US marketplace
}] }],
}),
});
}导入亚马逊订单(每5分钟轮询一次):
typescript
export async function pollAmazonOrders() {
const lastPolledAt = await db.syncState.getLastPolled('amazon') ?? new Date(Date.now() - 3_600_000);
const accessToken = await getAccessToken();
const params = new URLSearchParams({
MarketplaceIds: 'ATVPDKIKX0DER',
CreatedAfter: lastPolledAt.toISOString(),
OrderStatuses: 'Unshipped,PartiallyShipped',
});
const res = await fetch(`https://sellingpartnerapi-na.amazon.com/orders/v0/orders?${params}`, {
headers: { 'x-amz-access-token': accessToken },
});
const { payload } = await res.json();
for (const amazonOrder of payload.Orders ?? []) {
// Idempotent: skip if already imported
if (await db.orders.findByExternalId(amazonOrder.AmazonOrderId)) continue;
await orderQueue.add('import-order', {
externalId: amazonOrder.AmazonOrderId,
channel: 'amazon',
// ...map order fields
}, { jobId: `amazon-${amazonOrder.AmazonOrderId}` });
}
await db.syncState.updateLastPolled('amazon', new Date());
}库存变化时同步所有渠道库存:
typescript
export async function syncInventoryAcrossChannels(sku: string, quantity: number, source: string) {
const tasks = [];
if (source !== 'amazon') {
tasks.push(updateAmazonInventory(process.env.AMAZON_SELLER_ID!, sku, quantity)
.catch(err => console.error(`Amazon sync failed for ${sku}:`, err)));
}
if (source !== 'ebay') {
tasks.push(ebayClient.updateInventoryItem(sku, quantity)
.catch(err => console.error(`eBay sync failed for ${sku}:`, err)));
}
// Run all syncs in parallel; individual failures logged but don't block others
await Promise.allSettled(tasks);
}Best Practices
最佳实践
- Set a safety stock buffer for each channel — never expose 100% of your inventory to marketplaces; reserve a buffer for your own store and to absorb sync lag
- Implement idempotent order imports — use the marketplace order ID as a unique key; polling can return the same order multiple times; a unique constraint prevents duplicates
- Acknowledge marketplace orders promptly — Walmart requires acknowledgment within 4 hours; Amazon expects shipping confirmation within the promised delivery SLA; late responses result in account defect metrics
- Respect marketplace-specific rate limits — Amazon SP-API uses token bucket limits per operation; use exponential backoff and the Feeds API for bulk inventory updates (thousands of SKUs) instead of individual calls
- Monitor listing health, not just sync status — track listing suppression, buy box win rate, and account health per marketplace; suppressed listings cost revenue
- 为每个渠道设置安全库存缓冲——不要将100%的库存展示在电商平台上;为自有店铺预留缓冲库存,并应对同步延迟问题
- 实现幂等性订单导入——使用平台订单ID作为唯一标识;轮询可能会重复返回同一订单,唯一约束可防止重复导入
- 及时确认平台订单——沃尔玛要求在4小时内确认订单;亚马逊要求在承诺的配送服务水平协议(SLA)内确认发货;延迟响应会导致账户绩效指标下降
- 遵守平台专属速率限制——Amazon SP-API对每个操作使用令牌桶限制;对于批量库存更新(数千个SKU),使用Feeds API而非单个调用,并采用指数退避策略
- 监控商品列表健康状况,而非仅同步状态——跟踪每个平台的商品列表抑制情况、购物车赢得率和账户健康状况;被抑制的商品列表会损失营收
Common Pitfalls
常见问题及解决方案
| Problem | Solution |
|---|---|
| Amazon listing succeeds but goes inactive | Check for listing suppressions in the Listings API response; common causes include missing required attributes for the product type |
| Inventory oversells due to sync lag | Set a safety stock buffer in your marketplace app settings; always run a final inventory check at checkout |
SP-API returns | Each SP-API operation has separate rate limits; use the Feeds API for bulk inventory updates instead of individual PATCH calls |
| Shopify marketplace app not importing orders | Check that the app has Write permissions for Orders in your Shopify admin under Apps → App permissions |
| eBay listing rejected for policy violation | Pre-screen product titles for restricted terms before automating; review eBay's Prohibited Items policy |
| 问题 | 解决方案 |
|---|---|
| 亚马逊商品上架成功但变为无效状态 | 检查Listings API响应中的商品列表抑制原因;常见原因包括商品类型缺少必填属性 |
| 因同步延迟导致库存超卖 | 在电商平台应用设置中设置安全库存缓冲;结账时始终进行最终库存检查 |
SP-API返回 | 每个SP-API操作有单独的速率限制;对于批量库存更新,使用Feeds API而非单个PATCH调用 |
| Shopify电商平台应用未导入订单 | 在Shopify后台的Apps → App permissions中检查应用是否拥有订单的Write权限 |
| eBay商品列表因政策违规被拒绝 | 自动化上架前预先检查商品标题是否包含受限词汇;查看eBay的禁售商品政策 |
Related Skills
相关技能
- @webhook-architecture
- @product-information-management
- @erp-integration
- @monitoring-alerting-commerce
- @webhook-architecture
- @product-information-management
- @erp-integration
- @monitoring-alerting-commerce