如何通过API在第三方Shopify网站实现自动添加商品至购物车?
Shopify 自动添加商品至购物车的PHP实现方案
核心逻辑
Shopify 购物车基于会话(Cookie)维护状态,添加商品的核心是向店铺的 /cart/add.js 端点发送POST请求,传入正确的商品变体ID和数量,同时保留会话Cookie以保证购物车状态一致。
具体实现步骤(PHP + cURL)
1. 获取目标商品的变体ID
Shopify 商品的每个规格(颜色、尺寸等)对应唯一的变体ID,这是添加购物车的关键参数,可通过两种方式获取:
- 直接查看商品页面源码,搜索
variantId或data-variant-id字段; - 调用店铺公开商品API:请求
https://{店铺域名}/products/{商品handle}.json,在返回的JSON中提取variants数组里的id值。
2. 编写PHP cURL代码实现添加操作
以下是完整示例代码,包含Cookie维护、请求构造和结果处理:
<?php // 配置参数 $shopDomain = 'your-shop-domain.myshopify.com'; // 目标店铺域名 $variantId = 123456789; // 商品变体ID $quantity = 1; // 购买数量 // 初始化cURL会话 $ch = curl_init(); // 发送添加商品请求,保存会话Cookie $addCartUrl = "https://{$shopDomain}/cart/add.js"; $postData = json_encode([ 'id' => $variantId, 'quantity' => $quantity ]); curl_setopt_array($ch, [ CURLOPT_URL => $addCartUrl, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' // 模拟浏览器UA,避免被拦截 ], CURLOPT_RETURNTRANSFER => true, CURLOPT_COOKIEJAR => 'shopify_cookie.txt', // 保存Cookie到本地文件 CURLOPT_FOLLOWLOCATION => true ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 处理添加结果 if ($httpCode === 200) { $responseData = json_decode($response, true); echo "商品添加成功:" . $responseData['title'] . "\n"; } else { echo "添加失败,HTTP状态码:{$httpCode},响应内容:{$response}\n"; curl_close($ch); exit; } // 引导用户进入购物车页面(两种方式可选) $cartUrl = "https://{$shopDomain}/cart"; // 方式1:直接跳转 // header("Location: {$cartUrl}"); // 方式2:输出跳转链接 echo "<a href='{$cartUrl}'>点击进入购物车完成支付</a>"; curl_close($ch); ?>
3. 关键注意事项
- Cookie维护:必须用
CURLOPT_COOKIEJAR保存Cookie,后续请求若需操作同一购物车,需搭配CURLOPT_COOKIEFILE读取Cookie; - 请求头设置:务必添加合理的
User-Agent,部分Shopify店铺会拦截无UA的请求; - 变体ID正确性:使用错误的变体ID会返回400/422状态码,需确认ID匹配目标商品规格;
- 批量添加:添加多个商品可构造包含多组商品的请求体,格式如下:
{ "items": [ {"id": 123456789, "quantity": 1}, {"id": 987654321, "quantity": 2} ] }
JavaScript方案补充(可选)
若需前端实现,可直接调用Shopify的JS API:
// 单个商品添加 fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: 123456789, quantity: 1 }) }) .then(response => response.json()) .then(data => { window.location.href = '/cart'; // 跳转购物车 }) .catch(error => console.error('添加失败:', error));
内容的提问来源于stack exchange,提问作者Jonathon Philip Chambers
相关产品推荐
相关产品推荐

