我们可以使用Shopify店面GraphQL API(而不是管理员)按SKU获取产品吗?

我们可以使用Shopify店面GraphQL API(而不是管理员)按SKU获取产品吗?,shopify,shopify-api,shopify-storefront-api,Shopify,Shopify Api,Shopify Storefront Api,这件事我已经坚持了两天多了。我找不到这方面的任何资源。有许多使用管理API的解决方案,但我没有管理权限。我试图解决的问题是:我只能访问产品的SKU。我需要使用店面API从Shopify获取所有其他信息(标题、价格、描述、featuredImage等)。以下是获取产品的函数: function loadProducts(items) { let products = []; items.forEach((item) => { const sku = item

这件事我已经坚持了两天多了。我找不到这方面的任何资源。有许多使用管理API的解决方案,但我没有管理权限。我试图解决的问题是:我只能访问产品的SKU。我需要使用店面API从Shopify获取所有其他信息(标题、价格、描述、featuredImage等)。以下是获取产品的函数:

function loadProducts(items) {
    let products = [];

    items.forEach((item) => {
        const sku = item.id;
        if (sku !== "undefined") {
            /* TODO: Need to figure out this query*/
            const query = `{
         products(first: 1, query: "sku:<sku>") {
    edges {
      node {
        title
        id
        description
      }
    }
  }
       }`;

            const STOREFRONT_ACCESS_TOKEN = 'xxxxxxxxxxxxxxx';
            const GRAPHQL_URL = 'https://<my-store>.myshopify.com/api/2021-01/graphql.json';
            const GRAPHQL_BODY = {

                'method': 'POST',
                'headers': {
                    'X-Shopify-Storefront-Access-Token': STOREFRONT_ACCESS_TOKEN,
                    'Content-Type': 'application/json',
                },
                'body': JSON.stringify({ query })

            }
            products.push(getData(GRAPHQL_URL, GRAPHQL_BODY));
        }
    });
    return Promise.all(products);
}
function getData(url, body) {
    return new Promise((resolve, reject) => {
        fetch(url, body)
            .then(res => res.json())
            .then(data => {
                resolve(data);
            })
            .catch((error) => {
                reject(error);
            });
    });
}
功能加载产品(项目){
让产品=[];
items.forEach((项目)=>{
const sku=item.id;
如果(sku!=“未定义”){
/*TODO:需要解决这个查询*/
常量查询=`{
产品(第一个:1,查询:“sku:”){
边缘{
节点{
标题
身份证件
描述
}
}
}
}`;
const STOREFRONT_ACCESS_TOKEN='xxxxxxxxxxxxx';
常量图形https://.myshopify.com/api/2021-01/graphql.json';
常量图形体={
'method':'POST',
“标题”:{
'X-Shopify-Storefront-Access-Token':Storefront\u Access\u Token,
“内容类型”:“应用程序/json”,
},
'body':JSON.stringify({query})
}
push(getData(GRAPHQL_URL,GRAPHQL_BODY));
}
});
退货承诺。全部(产品);
}
函数getData(url,正文){
返回新承诺((解决、拒绝)=>{
获取(url,正文)
.then(res=>res.json())
。然后(数据=>{
解析(数据);
})
.catch((错误)=>{
拒绝(错误);
});
});
}

如果你能把我引向正确的方向,我将不胜感激。请不要:我只想使用店面API,而不是管理员API。谢谢大家!

您不能使用店面API按SKU查询产品

店面产品的可用查询参数为:

  • 可供出售
  • 创建于
  • 产品类型
  • 标签
  • 头衔
  • 更新地址
  • 价格
  • 卖主

因此,您不能仅使用店面API,因为SKU没有公开(如管理API)。

谢谢您的回答!有什么方法可以在前端设置管理API吗?@KalpeshPatel不建议在店面上使用管理API。如果你不知道自己在做什么,你可以让你的商店受到外部攻击。但是,您可以创建一个私有应用程序,并使用其密码作为访问令牌与管理员API通信,但您需要禁用所有端点,只将产品保留为视图,不进行编辑,以防止第三方进行不必要的编辑。但我还是不推荐。