Shopify在感谢页面上访问带有ID的产品,而不使用' / admin'在网址中

时间:2017-04-13 12:03:28

标签: javascript json shopify

我正在尝试使用以下网址中的ID来访问特定产品,

https://tempstore.myshopify.com/products/1234.json

它给我404错误。
虽然,我能够访问以下所有产品:

https://tempstore.myshopify.com/products.json

我必须访问刚结账过程中处理过的产品 我的身份如下:

var products = Shopify.checkout.line_items;

产品将包含一系列产品ID,仅在结帐时处理。
现在我需要访问这些产品的所有其他属性。
我当然可以这样做:

https://tempstore.myshopify.com/admin/products/1234.json

但它需要身份验证 有什么想法吗?

2 个答案:

答案 0 :(得分:3)

从前端,你需要有产品句柄来获取JSON对象:

https://tempstore.myshopify.com/products/[handle].js

https://tempstore.myshopify.com/products/[handle].json

(请注意,.js.json端点的返回值彼此差异很大!)

就像你指出的那样,Shopify.checkout.line_items对象数组只有产品ID,不是产品句柄。但是,我们并非完全没有运气,因为我们可以通过点击/products.json端点获取商店中的整个产品列表,包括产品句柄。

当然,这意味着抓取一个潜在巨大的JSON对象只是为了获取我们应该包含在结帐行项目中的信息......但除非有一些备用的源项信息来源在结帐页面上提供,循环遍历整个列表可能是您需要做的。

所以你的结束代码看起来像这样:

Checkout.jQuery.getJSON(  // Or whatever your preferred way of getting info is
  'https://tempstore.myshopify.com/products.json',
  function(prodlist){
    for(var p = 0; p < prodlist.length; p++){
      var prod = prodlist[p];
      // Find if Shopify.checkout.line_items contains prod.id, left as exercise for the reader
      if(found){ 
        Checkout.jQuery.getJSON(
          'https://tempstore.myshopify.com/products/' + prod.handle + '.js', 
          function(product){ 
            /* Whatever needs to be done */
          })
      }
    }

  }

)

希望这有帮助!

答案 1 :(得分:1)

var shop = Shopify.shop;
    var lineItems = Shopify.checkout.line_items;
        var url = 'https://' + shop + '/products.json?callback=?';
        var requiredData = [];
        $.getJSON(url).done(function(data){
            lineItems.forEach(function(lineItemProduct){
                data.products.find(function(product){
                   if(lineItemProduct.product_id == product.id){
                    requiredData.push(product);
                   }
                });
            });
        });

        console.log(requiredData);

这就是我解决它的方式,如果它可以帮助任何人:)