Shopify API返回空购物车

时间:2018-11-11 18:41:57

标签: ajax api shopify

使用此API:https://help.shopify.com/en/themes/development/getting-started/using-ajax-api#add-to-cart

从我的Messenger机器人上,我分别用cart/add.jsvariant 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或任何缓存机制。

我在做什么错了?

2 个答案:

答案 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。