使用此API:https://help.shopify.com/en/themes/development/getting-started/using-ajax-api#add-to-cart
从我的Messenger机器人上,我分别用cart/add.js
和variant id
调用quantity
并返回成功消息,但是我调用cart.js
来检索项目,购物车始终是空的。
我正在这样向购物车中添加商品:
$cartAPI = 'https://'.$shopKey.':'.$shopSecret.'@'.$shopUrl.'/cart/add.js';
$request = $client->request('POST', $cartAPI, [
'form_params' => [
'id' => (int) $productID,
'quantity' => 1
]
]);
并像这样检索购物车:
$cartAPI = 'https://'.$shopKey.':'.$shopSecret.'@'.$shopUrl.'/cart.js';
$request = $client->get($cartAPI);
我试图像这样在Guzzle通话中包含cookie
$this->client = new Client(['cookies' => true]);
和两个调用都使用相同的客户端实例,但仍返回空购物车。
为此,我不使用CloudFlare或任何缓存机制。
我在做什么错了?
答案 0 :(得分:2)
您做错了什么。你为什么要用钥匙和秘密打电话给Shopify?您不是在这里卖空自己吗?我的意思是,如果我检查了您的源代码,并看到了密钥和机密,我将能够使用它来做我想做的任何事情。这是目标吗?允许互联网上的任何人让您看起来很傻吗? Shopify有一个按钮,您可以将其放置在任何地方以将产品添加到购物车。您可以使用它。它是安全的。
答案 1 :(得分:1)
解决方案,我在这里想出任何有相同问题的人。我需要使用cart
cookie。最终做了类似的事情:
$cartCookie = Cache::tags(['user:' .$userId, 'cookies'])->get('cart');
if (!$cartCookie) {
$client = new Client(['cookies' => true]);
} else {
$cookieJar = CookieJar::fromArray([
'cart' => $cartCookie,
], conf('shop.url'));
$client = new Client(['cookies' => $cookieJar]);
}
当用户第一次将商品添加到购物车中并用于周期性添加时,Cookie会存储在缓存中。自建立聊天机器人以来,我不得不将其放入缓存中,但是您只能从浏览器中使用Cookie。