我如何从 Shopify Buy SDK 获取当前库存?

问题描述 投票:0回答:2

我正在使用shopify buy sdk:https://www.npmjs.com/package/shopify-buy

我想获取特定产品的当前库存数量。我可以这样获取产品信息:

var Client = require('shopify-buy');
const shopify = Client.buildClient({
    domain: REDACTED_SHOPIFY_DOMAIN,
    storefrontAccessToken: REDACTED_SHOPIFY_TOKEN
});
let product = await shopify.product.fetch(productId);

产品返回以下值:

  'attrs',           '__typename',
  'id',              'availableForSale',
  'createdAt',       'updatedAt',
  'descriptionHtml', 'description',
  'handle',          'productType',
  'title',           'vendor',
  'publishedAt',     'onlineStoreUrl',
  'options',         'images',
  'variants',        'type'

这不包括有关股票的信息。

在此页面上,它显示有一个名为“totalInventory”的值,这是我需要的,但我认为这是一个不同的 SDK,我的不返回该值:https://shopify.dev/docs/api/storefront /2023-04/对象/产品

我还进入了我的 api 应用程序设置,并查看了“Storefront API 访问范围”。我添加了一个名为

unauthenticated_read_product_inventory
的东西,我认为它可以做到这一点,但它仍然返回相同的信息。

我还尝试使用 graphql 客户端,这似乎是访问 API 的另一种方式。

async function getProductGraphql(productId) {
    const productsQuery = shopify.graphQLClient.query((root) => {
        root.addConnection('products', { args: { first: 10 } }, (product) => {
            product.add('title');
            //product.add('totalInventory');
        });
    });

    shopify.graphQLClient.send(productsQuery).then(({ model, data }) => {
        let productData = data.products.edges[0].node;
        console.log('got product', productData);
    });
}

如果我只询问标题,它就可以工作,但如果我尝试获取

totalInventory
,它会显示“错误:在架构中的类型“产品”上找不到名称为“totalInventory”的字段”

知道如何使用此 sdk 获取此信息吗?

编辑:我更接近了。我将 require 切换为这个,这样您就可以访问通常不包含的属性。现在它可以成功地告诉我产品的总库存了。

var Client = require('shopify-buy/index.unoptimized.umd');
    const productsQuery = shopify.graphQLClient.query((root) => {
        root.addConnection('products', { args: { first: 10 } }, (product) => {
            product.add('title');
            product.add('totalInventory');
        });
    });

    shopify.graphQLClient.send(productsQuery).then(({ model, data }) => {
        let productData = data?.products?.edges[0]?.node;
        console.log('got product', productData);
    });

此示例的问题在于它正在查找产品列表,而不是特定产品。所以我尝试修改查询以访问

product
而不是
products
,这应该让我可以按 ID 进行搜索:

const productsQuery = shopify.graphQLClient.query((root) => {
    root.addConnection('product', { args: { id: productId } }, (product) => {
        product.add('title');
        product.add('totalInventory');
    });
});

shopify.graphQLClient.send(productsQuery).then(({ model, data }) => {
    let productData = data?.products?.edges[0]?.node;
    console.log('got product', productData);
});

但这会在“root.addConnection”上抛出一个错误,上面写着

Error: No field of name "pageInfo" found on type "Product" in schema
,我不明白,因为我在任何地方都没有说“pageInfo”......

javascript node.js api shopify shopify-api
2个回答
0
投票

发现有针对此确切问题的错误报告(自 2021 年起)。

这似乎无法获得单一产品,而我必须获取所有产品,然后在它们中搜索合适的产品。

async function getProductsGraphql4(productId) {
    const productsQuery = shopify.graphQLClient.query((root) => {
        root.addConnection('products', { args: { first: 250 } }, (product) => {
            product.add('title');
            product.add('totalInventory');
        });
    });
    let result = await shopify.graphQLClient.send(productsQuery)
    return result.data.products.edges.find(p => p.node.id === productId).node;
}

0
投票

这方面有什么更新吗?我正在处理同样的问题。我建立了一个静态站点,在产品详细信息页面上,需要进行库存查找。

© www.soinside.com 2019 - 2024. All rights reserved.