Article
2026-04-01-Merchant-Portal-Payment-Links-PRD
Merchant Portal – Payment Links-PRD
文档信息
-
模块:Payment Links
-
产品形态:Merchant Portal(创建/管理) + Hosted Checkout(客户支付)
-
v1 定位:非订阅(one-time pricing model)的 Payment Link;链接可重复使用、可公开分享、不要求预先绑定 customer
背景与问题
1.1 为什么要做 Payment Links(而不是只用 Invoice)
StablePay 目前有 Invoices,但 Invoices 更适合“对已知客户的应收账单”。Payment Links 是“公开可分享的托管支付页链接”,适合营销与一对多销售。
Payment Links vs Invoice 对照
payment Links vs 单纯的 URL
Payment Links 是一个功能丰富的对象,而不仅仅是一个 URL,因为它:
-
可以管理和跟踪:
-
可以启用/禁用
-
可以更新配置
-
可以通过 API 检索使用数据
-
-
包含完整的支付配置:
-
价格和商品
-
税费设置
-
支付方式选项
-
客户信息收集设置
-
成功/取消重定向 URL
-
-
支持后续交互:
-
可以查询关联的支付和客户
-
可以分析转化率
-
可以应用不同的营销追踪参数
-
Payment Links 与其他 对象的区别
-
与 Checkout Session 的区别:
-
Checkout Session 是一次性的,创建后不能修改
-
Payment Link 是持久的,可以随时更新或禁用
-
Checkout Session 通常需要通过代码创建,而 Payment Link 可以通过 Dashboard 创建并分享
-
-
与产品/价格的区别:
-
产品和价格定义"什么"在售卖
-
Payment Link 定义"如何"售卖并提供现成的支付页面
-
-
与发票的区别:
-
发票是针对特定客户的具体账单
-
Payment Link 是通用的,任何人都可以访问并支付
-
最佳实践
-
使用元数据进行追踪:添加元数据以便于分析和报告
-
添加 URL 参数:可以在 URL 末尾添加
[email protected]等参数 -
考虑使用不同的 Payment Links:为不同渠道或活动创建不同的链接以便跟踪
-
定期检查活跃链接:禁用不再需要的链接,保持安全性
-
自定义成功页面:使用
after_completion设置适当的成功体验
总结,Payment Links 是一个完整的对象,它生成并管理一个可分享的支付 URL,但它的功能远不止提供一个链接那么简单。它是一个功能齐全的支付解决方案,可以跟踪、更新和管理。
Payment Links 域名解析
Payment Links 的域名
Payment Links 使用的域名确实是 buy.stablepay.co,而非 checkout.stablepay.co。
例如,一个典型的 Payment Link URL 看起来像这样:
https://buy\.stablepay\.co/test\_14k5lFfE89NS3eg001
StablePay 不同域名的用途区分
StablePay 使用不同的子域名来区分不同类型的客户面向页面:
为什么使用不同域名
stablepay 使用不同域名有几个原因:
-
功能区分:
-
buy.stablepay.co表示公开可分享的商业链接 -
checkout.stablepay.co表示单次结账体验
-
-
品牌和用户体验:
-
"buy" 传达简单直接的购买行为
-
"checkout" 更暗示结账流程的一部分
-
-
内部系统架构:
-
不同产品可能由不同的后端服务支持
-
分离域名允许独立的基础设施和部署
-
-
安全与隔离:
-
将不同功能在域名级别分离提高了安全性
-
允许为不同功能应用不同的安全策略
-
-
使用自定义域名(暂不支持)
如果商家不希望显示 StablePay 的品牌,可以设置自定义域名来托管这些页面
1.2 v1 解决的问题
-
商户无需开发即可创建收款链接,分享给客户完成支付
-
支持收集必要的客户信息用于履约/对账(email/name/phone/shipping)
-
在 Portal 侧可查看链接表现与该链接产生的 payments,并能点击某笔 payment 查看完整信息(drawer)
目标与非目标
2.1 产品目标(v1)
-
创建 Payment Link(可复用、可公开访问)
-
支持多商品 line items(最多 10 个)
-
支持数量配置 & 客户可调数量(max 100)
-
支持在收银台强制/可选收集信息(email/full name/phone/shipping address)
-
支持 Copy URL、QR Code(下载)
-
支持详情页与 Payments & analytics(Visits/Checkout started/Paid/GMV)
-
点击 payment_id 打开 drawer,查看 customer/shipping/order/technical/tracking/metadata
2.2 非目标(v1 明确不做)
-
订阅 payment links(subscription)
-
tax / automatic tax / invoice PDF
-
商户管理支付方式(payment methods 由 StablePay 统一控制)
-
prefilled_email(以及任何 email prefill/locked prefill)
-
after payment 配置(确认页/redirect)暂不做
-
buy button / embed 组件暂不做
核心概念与定义
3.1 Payment Link 的本质
-
一个 Payment Link 是长期存在的资源(plink_xxx)
-
它可以被分享并被多人多次使用
-
每次客户打开并开始支付,会生成新的 checkout session;支付成功生成新的 payment/payment intent
3.2 Payment Links 与 Customer 的关系(v1 规则)
-
Payment Link 不要求预先指定 customer(支持匿名)
-
当客户在收银台填写 email/name/phone/shipping 等信息时:
- **Payment(Payment Intent)对象必须保存“交易快照信息”**(用于审计/对账/售后)
- Customer 对象是否创建/关联:v1 推荐默认策略 **if\_required**(仅当收集了 email 等信息时才尝试创建/关联;否则不主动创建,避免 Customers 列表噪音)
范围与约束(硬规则)
4.1 硬性限制(必须实现)
-
每个 Payment Link 最多 10 个 product(line_items ≤ 10)
-
若开启 “Let customers adjust quantity”,adjustable max ≤ 100
-
product description ≤ 5000 字符
-
product name ≤ 250 字符(与 Change name modal 计数一致)
-
unit price > 0,遵循币种小数位规则
用户角色与权限
-
Admin:创建/编辑/启停/查看/下载 QR
-
Operator:创建/编辑/启停/查看/下载 QR
-
Analyst/Readonly:仅查看(列表/详情/analytics/payment drawer)
用户故事(User Stories)
-
作为商户,我要创建一个可复用的收款链接并分享给客户
-
作为客服,我要在列表里 hover 一键 Copy URL 快速发给客户
-
作为运营/财务,我要在 Payment Link 详情页查看 GMV 与 Paid,并点开某笔 payment 查看客户信息与收货地址
-
作为商户,我希望配置“必须填写的信息”,确保我能履约或联系客户
交互与页面规格(原型)
https://cookie\-both\-18702477\.figma\.site/
7.1 Payment Links 列表页
布局
-
Title:Payment Links
-
CTA:+ Create payment link
-
Table columns:Name / Price / Status / Created / Actions(…)
交互
-
Row hover:出现 Copy URL 按钮(复制成功 toast)
-
Kebab menu:
-
Copy URL
-
Edit
-
Deactivate(红色)
状态
-
Active(绿)
-
Deactivated(灰)
7.2 Payment Links 详情页(Header + Tabs)
Header
-
标题:PAYMENT LINK / kiwi for €10.00 EUR
-
描述:Copy and share to start accepting payments with this link.
-
URL bar:链接 + copy icon
-
QR icon:打开 QR Code modal
-
kebab:Change name / Edit / Deactivate
Tabs
-
Overview(默认)
-
Payments and analytics
7.3 Overview Tab
Products card
- Table:Name(含图) / Quantity / Adjustable quantity(Yes/No)
Details card
-
Status
-
Date created
-
Collect addresses(None required / Shipping)
-
Collect phone numbers(Yes/No)
-
Collect full names(Yes/No)
-
Call to action button(Pay)
v1 不做 after payment 配置:不展示 Confirmation page 等字段(或显示 Default 但不可编辑,二选一;推荐直接移除以避免误导)
7.4 Payments and analytics Tab
Metrics
-
Visits
-
Checkout started
-
Paid
-
GMV
Payments table
-
Payment ID(可点击)
-
Amount (USD)(按原型)
-
Status(Succeeded badge)
-
Created
交互
- 点击 Payment ID → 打开右侧 Payment drawer(不跳转页面)
7.5 Create / Edit payment link(左配置 + 右 Preview)
Top bar
-
左:X
-
右:Create link / Save changes
7.5.1 Products(支持多商品,最多10个)
每个 product block:
-
Product name *(≤250)
-
Description(≤5000)
-
Image upload + Remove
-
Unit price *(>0)
-
Currency dropdown(币种集合来自 auto-currency conversion 支持列表;v1 不展示自动换汇说明)
-
Quantity stepper(默认 1)
-
Let customers adjust quantity(checkbox)
- 勾选后出现 Between min and max(默认 1\~100,max 不可\>100)
按钮:+ Add another product
- 达到 10 个后 disable,并显示提示 “Maximum 10 products per payment link.”
7.5.2 Options(决定收银台必填字段)
-
邮箱用户必填
-
Collect full name(toggle)
-
Mark as optional(checkbox)
-
Require phone number(toggle)
-
Collect shipping address(toggle)
-
Limit the number of payments (toggle)
最大10payments
Learn more 说明放到官网
Limit the number of times a payment link can be paid https://stablepay-a1f5fa99.mintlify.app/zh/product/Payment-Links-Limit-Payment-Count
这些开关会影响 Hosted Checkout 表单字段显示与校验,并决定 Payment 对象需要落哪些字段。
7.5.3 Preview(右侧)
-
展示 merchant、line items、total
-
展示表单字段(Email/Full name/Phone/Shipping address)按 options 显示
-
Payment method:只读说明 “AI-powered payment suggestions…”
-
CTA:Pay
7.6 Modals
7.6.1 Deactivate modal
-
标题:Deactivate payment link?
-
文案:Customers will no longer be able to make a purchase using this link…
-
Buttons:Cancel / Deactivate
-
右侧预览:buy.stablepay.co 显示 “The link is no longer active.”
7.6.2 Change name modal
-
Name input(<=250,计数)
-
文案:仅 Portal 可见,客户不可见
-
Buttons:Cancel / Save
7.6.3 QR Code modal
-
QR 图
-
URL input + copy
-
Buttons:Close / Download
7.7 Payment Detail Popup(点击 payment_id)
Drawer Header:
-
pay_xxx + copy icon
-
Status badge
-
Amount + currency
-
Created timestamp
-
Close X
Sections(按原型):
- Customer
-
Customer ID(link + copy;可为空)
-
Email(copy)
-
Full name
-
Phone
-
Locale
- Shipping address(仅当收集时出现)
- Recipient / Phone / Address
- Order
-
Line items(name、unit price、qty)
-
Total
- Payment technical
-
Payment link ID
-
Checkout session ID
-
Network
-
Tx hash(copy)
-
Confirmations
-
Metadata(k/v)
-
Raw JSON(折叠)
数据模型与对象(v1 必须落地)
8.1 PaymentLink 对象
关键字段:
-
id(plink_)
-
active(bool)
-
name(Portal 名称)
-
url
-
line_items[](≤10)
- name\(≤250\), description\(≤5000\), image\_url, unit\_amount, currency, quantity
- adjustable\_quantity \{ enabled, min, max\(≤100\) \}
-
-
options
- collect\_email
- collect\_full\_name \{ enabled, optional \}
- collect\_phone \{ enabled, required \}(如果你希望区分 required/optional,v1 phone 只有 require toggle 即可)
- collect\_shipping\_address \{ enabled \}
-
-
created_at/updated_at/created_by
-
metadata
8.2 Payment / Payment Intent 对象(必须扩展)
Hosted Checkout 行为(关键业务逻辑)
9.1 字段显示与校验
根据 payment link options:
-
collect_email=ON → email 必填
-
collect_full_name=ON → name required(若 Mark optional 勾选则 optional)
-
require_phone=ON → phone 必填(E.164 格式校验)
-
collect_shipping_address=ON → shipping address 必填(最少 line1/city/country 等)
9.2 事件与落库
-
checkout started:记录 visits / checkout started
-
payment succeeded:
- 生成 payment/payment intent
- 写入 payment\_link\_id \+ customer\_details \+ shipping \+ line\_items 快照
- 如果有 customer 模块:按策略创建/关联 customer\_id(v1 默认 if\_required)
-
校验、错误码与文案
10.1 UI 校验
-
超过 10 product:Add another product disabled + helper text
-
adjustable max>100:输入框红字 “Maximum quantity is 100.”
-
description>5000:红字 + 禁止保存
-
unit price ≤0:红字 + 禁止保存
10.2 API 错误码建议
-
payment_link_too_many_products
-
adjustable_quantity_max_exceeded
-
product_description_too_long
-
invalid_unit_amount
埋点与指标(v1)
-
payment_link.created / updated / deactivated
-
payment_link.copied / qr_downloaded
-
payment_link.visited(visits)
-
checkout.started
-
payment.succeeded / failed
Portal Metrics:
-
Visits(unique)
-
Checkout started
-
Paid(count)
-
GMV(sum)
验收标准(Acceptance Criteria)
-
Payment link 可重复使用:同一个 link 可产生多笔 payment(多用户多次支付)
-
payment link 可匿名:创建时不指定 customer;支付后 payment drawer 仍能展示收集到的信息
-
Create/Edit 支持最多 10 个 product;第 11 个无法添加(UI+API)
-
adjustable quantity max ≤100(UI+checkout)
-
description ≤5000(UI+API)
-
Deactivate 后 buy 页面提示 link inactive;Portal 状态变 Deactivated
-
Payments & analytics 可看到 metrics 与 payments table;点击 payment_id 打开 drawer 且字段齐全
-
Payment intent/payment 对象实际包含:customer_details/shipping/line_items/payment_link_id 等必要字段
研发拆分建议(Epic)
-
E1:PaymentLink CRUD + List/Details(Overview)+ Change name / Deactivate + QR
-
E2:Create/Edit + Preview + 校验限制(10 items / 100 qty / 5000 desc)
-
E3:Analytics 埋点 + payments list + payment drawer
-
E4:Payment API / Payment object 扩字段 + webhook 回传(customer/shipping/line_items/tracking)