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

如何编程获取Shopify店铺名称?API配置及商品更新需求问询

解决方案

1. 自动获取店铺名称(shopName)

完全可以通过编程方式自动获取店铺名称,不需要手动修改配置。Shopify应用在OAuth授权流程中,用户安装应用时会跳转到你的回调地址,此时请求参数里会包含shop字段(格式为your-shop-name.myshopify.com)。你只需要:

  • 从回调请求中提取shop参数,去掉.myshopify.com后缀就是所需的shopName
  • 将该店铺名称和对应的访问令牌(access token)一起存储到数据库中,后续调用API时直接从数据库读取对应店铺的信息

举个Express框架下的回调处理示例:

app.get('/auth/callback', async (req, res) => {
  const { shop } = req.query;
  // 去除后缀得到shopName
  const shopName = shop.replace('.myshopify.com', '');
  
  // 完成OAuth剩余流程,获取access token
  const accessToken = await getShopifyAccessToken(shop, req.query.code);
  
  // 将店铺信息存入数据库
  await saveShopInfoToDB(shopName, accessToken, shop);
  
  res.redirect('/');
});

后续调用API时,从数据库取出对应店铺的shopName和accessToken,动态初始化Shopify客户端即可。

2. 更规范的Shopify API配置方式

如果你用Node.js开发,更推荐使用Shopify官方维护的@shopify/shopify-api包,它内置了会话管理、OAuth流程封装、API调用规范,比第三方的shopify-api-node更贴合Shopify最新规则。

全局初始化配置示例

const { Shopify, ApiVersion } = require('@shopify/shopify-api');

Shopify.Context.initialize({
  API_KEY: 'your-api-key',
  API_SECRET_KEY: 'your-api-secret',
  SCOPES: ['write_products'], // 更新商品描述需要该权限
  HOST_NAME: 'your-app-domain.com',
  API_VERSION: ApiVersion.January24, // 选择最新稳定版本
  IS_EMBEDDED_APP: true, // 嵌入式应用设为true,非嵌入式设为false
  SESSION_STORAGE: new Shopify.Session.MemorySessionStorage(), // 生产环境建议用数据库存储
});

更新商品描述的API调用示例

核心是调用Admin REST API的/products/{product_id}.json接口,下面是官方包的调用示例:

async function updateProductDesc(shop, session, productId, newDesc) {
  const client = new Shopify.Clients.Rest(shop, session.accessToken);
  
  const response = await client.put({
    path: `products/${productId}`,
    data: {
      product: {
        body_html: newDesc // 商品描述支持HTML格式
      }
    },
  });
  
  return response.body.product;
}

// 调用示例(假设已获取到用户会话session)
updateProductDesc('your-shop-name.myshopify.com', session, 123456, '<p>全新的商品描述内容</p>');

如果坚持使用shopify-api-node,也可以结合存储的店铺信息动态初始化:

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

// 从数据库取出对应店铺的配置信息
const { shopName, accessToken } = await getShopInfoFromDB(targetShopDomain);

const shopify = new Shopify({
  shopName: shopName,
  apiKey: 'your-api-key',
  password: accessToken, // 这里用accessToken作为password参数
});

// 更新商品描述
await shopify.product.update(123456, {
  body_html: '<p>全新的商品描述内容</p>'
});

关键注意事项

  • 必须确保应用申请了write_products权限,否则无法修改商品描述
  • 生产环境不要用内存存储会话,要改用数据库(如PostgreSQL、MongoDB)持久化店铺信息
  • 每个店铺的API调用要使用对应店铺的客户端实例,不能全局共用一个实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:30:42