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 所做的任何操作,以及您将其连接到此应用程序的位置,也可以提供信息。所以你在这里有很多选择。请注意您的安全。
所以...我一直在玩 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 所做的任何操作,以及您将其连接到此应用程序的位置,也可以提供信息。所以你在这里有很多选择。请注意您的安全。