Shopify App 与 Function 开发
需求该做成 App、写成 Function,还是只改主题?判断只看一件事:这个逻辑必须在结账里生效吗。必须在结账里生效的只有 Function。
Function 开发
折扣、运费、支付方式、行项目调整。运行在 Shopify 服务端,结账时一定生效。
自定义 App
后台管理界面、定时任务、与 ERP/CRM 交互,需要 OAuth 与计费时走标准 App 路径。
扩展与 Headless
结账 UI 扩展、主题应用扩展、Hydrogen / Storefront API 前端。
接口与数据
GraphQL、Webhook、队列与对账,所有写操作可重入。
三种扩展方式怎么选
主题只管展示。用它算价格、算运费一定会出错,因为结账时以服务端为准。
Function 管结账逻辑:折扣、运费、支付方式排序、行项目合并拆分。执行有时间与内存限制,复杂计算要先在外部算好再传参。
App 管后台与集成:需要管理界面、定时任务、和外部系统交互、处理大量数据。App 可以带 Function 一起发布。
判断不清时用这条规则:会不会影响「钱」或「订单数据」。会 → Function 或 App;只是显示 → 主题。
我们做过的典型项目
- 按客户标签与市场组合的阶梯折扣(Function),替代三个互相冲突的折扣应用
- 满件赠送与套装拆行(Cart 与行项目处理),库存按组件扣减
- 结账页加自定义字段并写入订单 metafield,售后系统按字段自动分流
- 订阅商品:selling plan + 定时扣款 + 失败重试 + 客户自助跳过
- 退货自助页面:Return API 创建退货单、回补库存、按规则退款
- ERP/3PL 对接:订单下行、库存上行、状态回传,带幂等与补偿
技术底线
- 用 GraphQL Admin API,不用已进入 legacy 的 REST 路径
- Webhook 5 秒内返回 2xx,重活丢队列;用
X-Shopify-Webhook-Id做幂等 - API 版本显式锁定,升级前先在测试店跑一遍
- 所有写操作可重入,定时任务可断点续跑
交付与维护
交付内容:代码仓库、环境变量说明、部署流程、接口文档、改动清单。上线后 30 天免费修 bug。
Shopify 每年有 4 个 API 版本,每个版本支持 12 个月。我们会在版本到期前提醒并做适配,不让你的功能因为平台升级突然失效。