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

使用Node.js+CSV自动导入Shopify产品遇401授权错误求助

解决Shopify Admin API 401 Unauthorized错误(批量导入CSV产品)

一、修复核心凭证错误

你当前的401错误是因为API凭证参数传错了:

  • shopify-api-node里的password参数需要的是Admin API访问令牌,不是你用的API Secret。
  • API Secret仅用于webhook签名验证,不能直接作为API调用的密码。

获取正确的访问令牌:

  1. 进入Shopify后台 → 「应用与销售渠道」→ 打开你创建的自定义应用
  2. 切换到「API凭据」标签页
  3. 找到「Admin API访问令牌」,点击「显示」复制该值,将其填入.env的对应变量(建议重命名为ADMIN_ACCESS_TOKEN更清晰)

二、确认API权限配置

确保你的应用拥有创建产品的权限:

  1. 在自定义应用页面,进入「配置Admin API范围」
  2. 找到Products分类,勾选**write_products**权限
  3. 点击「保存」,如果刚修改权限,建议重新生成一次Admin API访问令牌

三、修正ShopName格式

shopName参数只需要填写myshopify域名的前缀部分:

  • 比如你的店铺地址是shop-name.myshopify.com/admin,那么process.env.SHOP_NAME应该设为shop-name,不要带.myshopify.com或/admin

四、优化代码避免API限流(可选但关键)

你当前的代码会同时发起大量请求,容易触发Shopify的API速率限制,建议改成批量异步处理:

const express = require("express");
const dotenv = require("dotenv");
const fs = require("fs");
const parse = require("csv-parser");
const Shopify = require("shopify-api-node");

const app = express();
dotenv.config();

// 初始化Shopify客户端
const shopify = new Shopify({
  shopName: process.env.SHOP_NAME,
  apiKey: process.env.API_KEY,
  password: process.env.ADMIN_ACCESS_TOKEN, // 这里用正确的Admin API访问令牌
});

// 收集CSV数据后批量创建产品
const products = [];
fs.createReadStream("products.csv")
  .pipe(parse({ columns: true, delimiter: "," }))
  .on("data", (product) => products.push(product))
  .on("end", async () => {
    console.log(`开始创建${products.length}个产品...`);
    const batchSize = 5; // 每次批量处理5个产品,可根据情况调整
    for (let i = 0; i < products.length; i += batchSize) {
      const batch = products.slice(i, i + batchSize);
      try {
        await Promise.all(
          batch.map(async (productData) => {
            // 映射CSV字段到Shopify API要求的格式
            const shopifyProduct = {
              title: productData.Title,
              handle: productData.Handle,
              product_type: productData["Product Type"],
              vendor: productData.Vendor,
              // 根据你的CSV字段补充其他必要字段
            };
            const createdProduct = await shopify.product.create(shopifyProduct);
            console.log(`已创建产品:${createdProduct.title}`);
          })
        );
      } catch (error) {
        console.error("批量创建失败:", error);
      }
      // 批量之间添加延迟,避免触发限流
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
    console.log("所有产品处理完成");
  });

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`服务运行在端口 ${port}`);
});

五、验证CSV字段匹配

Shopify Product API有必填字段(如title),导出的CSV字段名可能和API要求的驼峰命名不一致,建议手动映射字段(如示例代码中的shopifyProduct对象),避免因字段不匹配导致的创建失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:14:56