Shopify Storefront API 访问在网上商店中创建的购物车

Shopify Storefront API access cart created in web store

所以...我一直在玩 Shopify 的店面 API。我有一家商店...当将东西添加到购物车时,我收到一个令牌,我认为它是购物车 ID。我将此 ID 登录到我的浏览器控制台并复制它。

我制作了一个私人应用程序,我可以通过店面查询产品 API - 所以我想我可以通过 ID 检索购物车(我从浏览器)。

我在 base64 中对 cartId 进行编码...只是因为其他示例是 base64 字符串。果然在错误信息中正确解码了ID:

{
  "errors": [
    {
      "message": "Invalid global id '76f8efad975def03680e8de12442a65e'",
      "locations": [
        {
          "line": 2,
          "column": 5
        }
      ],
      "path": [
        "query",
        "node",
        "id"
      ],
      "extensions": {
        "code": "argumentLiteralsIncompatible",
        "typeName": "CoercionError"
      }
    }
  ]
}

我不知道 'global id' 是什么 - 但这是我的查询。


const cartId = 'NzZmOGVmYWQ5NzVkZWYwMzY4MGU4ZGUxMjQ0MmE2NWU'

   const query = `{
    node(id: "${cartId}") {
      id
      ... on Checkout {
        id
        ready
        currencyCode
        subtotalPrice
        taxesIncluded
        totalTax
        totalPrice
        lineItems(first: 250) {
          edges {
            node {
              id
              title
              quantity
              variant {
                id
                price
              }
            }
          }
        }
      }
    }
  }`

我的语法正确吗?或者,我是否在尝试检索在网站商店土地而非店面 API 土地上创建的购物车?

如果我的应用程序可以通过查询购物车 token/id 访问 Shopify 网站的访问者创建的任何购物车,那将是游戏规则的改变者。

** 编辑 **

我重构了我的代码 - 所以它使用网络钩子来获取购物车 ID。

但是我收到以下错误:

'无效的全局 ID 981820079255243500

我在某处读到(我忘了在哪里 - 它是一个兔子洞),Storefront API 使用不同的 ID 来访问与 webhook 提供的相同的购物车?这是真的吗?如果是,我该如何访问它?

import express from 'express';
import bodyParser from 'body-parser';

import fetch from 'node-fetch';
import Client from 'shopify-buy';
global.fetch = fetch;

// ........ removed for brevity


const client = Client.buildClient({
  domain: shopUrl,
  storefrontAccessToken: accessToken
});

// we need to base64 our ID for storefront api
const base64Encode = (data) => {
  const buff = new Buffer(data);
  return buff.toString('base64');
}


const getCart = async (cartId) => {
try {
  const cartBuffer64 = base64Encode(cartId);
  const myCart = await client.checkout.fetch(cartBuffer64)
  console.log(myCart)
  } catch(e) {
    console.log(e)
    throw e
  }
}

// noddy express app to test if this works
app.post('/hook', (req, res) => {
  // todo: validate webhook
  console.log(req.body.id)
  getCart(req.body.id)
  return res.status(200).end()
});

您可以将任何创建的购物车发送到您的应用程序。第一,您可以将 webhook 分配给 cart/create,使用 cart/update 进行更改,或者第二,您可以将 ID/token 发送到 App Proxy。您使用 StorefrontAPI 所做的任何操作,以及您将其连接到此应用程序的位置,也可以提供信息。所以你在这里有很多选择。请注意您的安全。