Shopify 在感谢页面上访问产品及其 ID,而不在网址中使用“/admin”

awe*_*san 4 javascript json shopify

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

https://tempstore.myshopify.com/products/1234.json
Run Code Online (Sandbox Code Playgroud)

它给了我 404 错误。
尽管如此,我可以访问以下所有产品:

https://tempstore.myshopify.com/products.json
Run Code Online (Sandbox Code Playgroud)

我必须访问刚刚在结帐过程中处理的产品。
我的 id 如下:

var products = Shopify.checkout.line_items;
Run Code Online (Sandbox Code Playgroud)

products将仅包含在结账时处理的产品 ID 数组。
现在我需要访问这些产品的所有其他属性。
我肯定可以做到这一点:

https://tempstore.myshopify.com/admin/products/1234.json
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*e B 5

从前端,您需要拥有产品句柄才能获取 JSON 对象:

https://tempstore.myshopify.com/products/[handle].js
Run Code Online (Sandbox Code Playgroud)

或者

https://tempstore.myshopify.com/products/[handle].json
Run Code Online (Sandbox Code Playgroud)

.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 */
          })
      }
    }

  }

)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!