You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Shopify Partner API获取所有托管店铺的商品列表?

实现Shopify托管店铺商品库存查询的Node.js代码

前置准备

  • 确认应用已获取托管店铺的read_products权限(你已完成该配置)
  • 从Shopify Partners控制台获取应用的API_KEY、API_SECRET,以及托管店铺的SHOP_DOMAIN(格式如your-shop.myshopify.com)和ACCESS_TOKEN(可在托管店铺详情页生成)

代码示例

先安装依赖包:

npm install shopify-api-node

编写查询代码:

const Shopify = require('shopify-api-node');

// 初始化Shopify客户端
const shopify = new Shopify({
  shopName: 'YOUR_SHOP_DOMAIN', // 替换为目标托管店铺域名(无需带https)
  apiKey: 'YOUR_API_KEY', // 应用的API密钥
  password: 'YOUR_ACCESS_TOKEN', // 托管店铺的访问令牌
  apiVersion: '2024-04' // 使用Shopify最新稳定API版本
});

// 批量获取所有商品及对应库存信息
async function fetchAllProductsInventory() {
  let allProducts = [];
  let nextPage = null;

  try {
    do {
      const response = await shopify.product.list({
        limit: 250, // 单次请求最大返回数,Shopify允许的上限
        ...(nextPage && { pageInfo: nextPage }) // 分页续传参数
      });

      // 提取核心的商品与库存字段
      const processedProducts = response.data.map(product => ({
        productId: product.id,
        productTitle: product.title,
        variants: product.variants.map(variant => ({
          variantId: variant.id,
          sku: variant.sku,
          inventoryQuantity: variant.inventory_quantity,
          inventoryItemId: variant.inventory_item_id
        }))
      }));

      allProducts = [...allProducts, ...processedProducts];
      nextPage = response.pageInfo?.nextPageInfo;
    } while (nextPage);

    console.log('全量商品库存数据:', allProducts);
    return allProducts;
  } catch (error) {
    console.error('获取库存失败:', error.response?.data || error.message);
    throw error;
  }
}

// 执行查询
fetchAllProductsInventory();

关键说明

  • 代码通过分页机制处理大量商品,避免单次请求数据超限
  • 仅保留了核心的商品标识、SKU和库存数量字段,可根据需求自行扩展其他字段
  • 若需批量处理多个托管店铺,可将各店铺的配置信息存入数组,循环调用查询函数
  • 实时查询建议添加缓存逻辑,避免频繁调用触发Shopify的API速率限制

内容的提问来源于stack exchange,提问作者Philippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:45:29