我正在使用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”......
发现有针对此确切问题的错误报告(自 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;
}
这方面有什么更新吗?我正在处理同样的问题。我建立了一个静态站点,在产品详细信息页面上,需要进行库存查找。