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

调用Shopify API创建自定义集合返回400 Bad Request错误是什么原因?

问题原因

  • 未初始化@shopify/shopify-api库的全局上下文,这是使用该官方库的前置要求
  • REST客户端POST请求的请求体参数名错误,你使用了body字段传参,但该库要求用data字段传递请求体
  • 客户端初始化的第二个参数传入值错误,该位置需要传入店铺的API访问令牌,不是API密钥(你直接用Basic Auth调用接口的逻辑和官方SDK的参数要求不一致,需要按SDK规范传参)
  • 未明确指定接口版本,要么在上下文初始化时指定API版本,要么在请求path上加上版本前缀

修改后可运行代码

require('dotenv').config()
const { Shopify } = require('@shopify/shopify-api')

// 全局上下文初始化,必须放在客户端创建之前
Shopify.Context.initialize({
  API_KEY: process.env.SHOPIFY_API_KEY,
  API_SECRET_KEY: process.env.SHOPIFY_API_SECRET_KEY,
  SCOPES: ['write_products', 'read_products'], // 确保申请了自定义集合的读写权限
  HOST_NAME: process.env.SHOPIFY_APP_HOST,
  API_VERSION: '2021-07', // 和你使用的接口版本保持一致
  IS_EMBEDDED_APP: false,
  SESSION_STORAGE: new Shopify.Session.MemorySessionStorage(),
})

// 第二个参数传店铺的访问令牌,私有应用可直接用后台生成的私有应用密码
const client = new Shopify.Clients.Rest(
    process.env.SHOPIFY_STORE, 
    process.env.SHOPIFY_ACCESS_TOKEN
);

(async () => {
    try {
        const data = await client.post({
            path: 'custom_collections',
            // 用data字段传递请求体,不要用body
            data: { custom_collection: { title: 'Nike' } },
        })
        console.log('创建成功:', data)
    } catch(err) {
        // 打印完整的返回错误内容,方便排查具体问题
        console.error('错误详情:', err.response?.body || err)
    }
})()

调试建议

你之前打印错误只序列化了基础错误对象,看不到Shopify返回的具体错误说明,按上述代码打印err.response.body可以获取到更明确的错误提示,比如权限不足、参数缺失等,排查效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:45:00