店铺契约
顾客的静态店 — 来自 GET /api/v1/menu 的目录、itemId 加数量的购物车、没有密钥的可发布钥匙。
店铺契约(storefront-contract@v1)描述顾客自己部署的店。Delieta 不托管。产物是静态导出:目录在构建时烘焙,购物车活在 localStorage,结账是标出的接缝,不发 POST。
两个环境变量,没有公开前缀
DELIETA_API_URL=https://delieta.pl
DELIETA_PUBLISHABLE_KEY=dlt_live_…
只要 origin — 不要 /api/v1 后缀,不要尾斜杠。钥匙在构建时用于 GET /api/v1/menu。没有 NEXT_PUBLIC_DELIETA。
缺环境 → 「设置目录」页,不是假装成店的空店铺。有环境、请求失败 → 「目录不可用」页。
可发布钥匙是无能的,不是「藏起来」
kind: publishable 只持有 catalog:read(menu:read 是别名)。它能出现在公开 HTML 里,只因为这把钥匙不能读订单、司机或顾客。
秘密钥匙(orders:write、eta:quote)不进浏览器、店铺仓库或 Pages。dlt_test_… 也不是「HTML 里安全的秘密」。
钥匙决定租户。不要发送 companyId。
三个表面
| 表面 | 今天 | 还没有 |
|---|---|---|
| 目录 | 带可发布 Bearer 的 GET {origin}/api/v1/menu。grosz,PLN。不可用条目省略。 | 不重建就刷新 |
| 购物车 | localStorage 里的 { itemId, quantity }[]。屏幕上的合计来自烘焙目录。 | 作为单独行字段的修饰符 |
| 结账 | /checkout/ 显示购物车。不做 POST。 | 同一购物车交给 Delieta;服务器计价;回来支付 URL |
顾客发送是什么(标识和数量),从不发送多少钱。浏览器里打的价格不是契约。
flowchart TD env["两个环境:origin 和可发布钥匙"] --> build["构建烘焙 GET /menu"] build --> html["静态 HTML"] html --> cart["购物车:itemId 和数量"] cart --> seam["/checkout/ 显示购物车,不发 POST"] secret["秘密钥匙"] -.->|"永不在这棵树里"| html
你复制的模板是静态店铺导出。Delieta 不托管那棵树。
钱和错误
整 grosz。在显示边缘格式化。Partner API 错误是 application/problem+json;静态导出上你最常见到它们是在构建时。按 code 分支:unauthorized、scope_required、rate_limited。
店铺今天用到和尚未调用的完整操作在 Partner API。

