You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

能否通过Shopify API搭建独立服务器自定义站点并跳转至Shopify结账?

自定义前端+Shopify结账:可行方案详解

嘿,这个方案完全可行!很多品牌都在用这种「自有自定义前端 + Shopify 后端结账」的模式,你之前的疑问核心是「购物车数据怎么同步到Shopify」,我来一步步帮你理清楚漏掉的环节和具体实现步骤:

核心问题:购物车不能存在自有服务器,要同步到Shopify

你之前想把购物车存在自己的会话里,这就是关键误区——Shopify没法直接读取你服务器的会话数据,所以必须把购物车数据存在Shopify的系统里,常用的两种方式:

方式1:用Shopify Cart API(适合标准商品场景)

这是最常用的方案,当用户在buypizza.com点击「加入购物车」时,你不要自己存数据,而是调用Shopify的Cart API来创建/更新Shopify端的购物车:

  • 调用接口:POST /cart/add.js(可以前端直接调用,也可以后端代理调用,后端调用更安全)
  • 必须传的参数:id产品变体ID,划重点!不是产品ID,每个规格的商品对应唯一变体ID)、quantity(购买数量)
  • 接口返回:Shopify会返回当前购物车的完整数据,其中包含一个token(购物车唯一标识),你把这个token存在用户的会话里(比如Cookie或者服务器Session)

之后用户修改购物车(增减数量、删除商品),都要调用对应的Cart API接口:

  • 修改数量:POST /cart/change.js
  • 删除商品:POST /cart/clear.js

方式2:用Draft Order API(适合自定义场景)

如果你的商品需要自定义定价、添加自定义属性,或者是预订单这类特殊场景,用Draft Order API更灵活:

  • 调用POST /admin/api/2024-07/draft_orders.json创建草稿订单,传入商品信息、金额、买家信息等
  • 创建成功后,Shopify会返回一个invoice_url,这个就是直接的结账链接,用户跳转过去就能看到对应的订单内容

跳转结账的正确姿势

  • 如果用Cart API:取出存在会话里的cart_token,跳转至 https://xyz.myshopify.com/cart/{{cart_token}},或者直接跳转https://xyz.myshopify.com/checkout——Shopify会自动识别用户的购物车会话,加载对应的商品
  • 如果用Draft Order API:直接跳转返回的invoice_url即可,无需额外处理

完整流程梳理

  1. 产品数据拉取buypizza.com通过Shopify Storefront API(推荐,权限更适合前端场景)或者Admin API拉取产品列表和详情,渲染到自有页面
  2. 加入购物车同步:用户点击「加入购物车」,你的后端/前端调用Shopify Cart API,传入变体ID和数量,获取并存储购物车token
  3. 购物车状态维护:用户修改购物车时,同步调用Shopify的Cart API更新数据
  4. 跳转结账:用户点击「结账」,携带购物车token跳转至Shopify的结账页面,完成支付流程

关键注意事项

  • 必须用产品变体ID:千万不要传产品ID,Shopify的加购操作只认变体ID,每个规格的商品(比如大份披萨、小份披萨)都有单独的变体ID,你拉取产品数据时要把变体ID一起拿到
  • API权限配置:如果用Storefront API,需要在Shopify后台创建Storefront API密钥,开启read_productswrite_checkouts权限;如果用Admin API,需要创建私有应用,确保有对应的读写权限
  • 跨域处理:如果前端直接调用Cart API,需要在Shopify后台的「在线商店」→「偏好设置」→「内容安全策略」里添加buypizza.com的域名,或者用后端代理请求避免跨域错误
  • 购物车同步:所有购物车的操作(加购、改量、删除)都要同步到Shopify,不能只修改自有服务器的数据,否则跳转结账后会出现商品丢失的情况

内容的提问来源于stack exchange,提问作者Usman Shahid

火山引擎 最新活动