两条路
结账会话
1
展示在售内容
用
GET …/ticket-types(票名、价格、售卖窗口、状态)、…/availability(实时剩余数字)、…/addons、…/bundles、…/venues、…/sessions(议程)、…/speakers(讲者)渲染活动页。买家输入兑换码时,先用 GET …/redemption-codes/lookup?code= 预览——解锁的票(隐藏票也在内)、附带的权益、折后价,在下单之前即可展示。2
创建会话并跳转
201 返回 { "id", "url", "expiresAt" }。把买家送到 url —— orriven 的托管结账页。请求体中除 items 外均为可选:未提供的信息(邮箱、姓名、票种的报名表单答案、加购)由页面向买家询问。预填的邮箱以打码形式展示,买家不能修改。会话有效 24 小时且不占位。占位从买家在会话中下单时开始。GET …/checkout-sessions/{id} 可查询它是否已产生订单(orderId)。3
接回买家
付款完成(免费单则立即)后,买家看到托管订单页及其**「返回主办方」**按钮,按钮跳转到
returnUrl 并附加 ?order=<orderNumber>&status=<status>。status=paid 表示座位、权益与入场凭证均已存在。其他值(expired、cancelled)表示买家中途离开。未提供 returnUrl 时,按钮使用控制台中设置的活动页面地址。4
在后端核对
后端可随时读取订单:
GET …/orders(或按 id)给出 status、履约后的 registrationId、orderUrl(其托管页面),订单仍开放时还有 checkoutUrl。付费单的结算由平台的 Stripe webhook 完成,而不是经这次调用。需要在服务端据此动作时,请轮询直到 paid。直接下单与确认
完全由接入方渲染的结账流程,仍沿用三步:1
下单
201 返回待确认订单。它会占位 15 分钟,并带 orderUrl:托管订单页,可直接交给买家完成核对与付款。已在该活动报过名的买家得到 200 和 alreadyRegistered: true:被确认,绝不重复占位。票已满则 412。2
确认——免费当场结清,付费拿 Stripe 支付页
- 免费订单(总额 0)当场结清:
{"status":"paid", "registration":{…}, "created":true}。不经过 Stripe。 - 付费订单返回
{"status":"awaiting_payment", "paymentUrl":"https://checkout.stripe.com/…"}。将买家重定向过去。successUrl/cancelUrl为可选:传入时 Stripe 把买家直接送回接入方的页面(仅限 https——本地开发允许 http://localhost);不传时买家落在托管订单页,再由它送回订单的returnUrl。
3
等待结算
付款经平台的 Stripe webhook 结算,而不是经这次调用。轮询
GET …/orders/{orderId} 直到 status 变为 paid 且 registrationId 已填。那一刻,座位、权益、签到码都已存在。在站点里做「我的票」
平台会给每位已确认的买家发送入场凭证链接——托管页面,包含其签到二维码、钱包通行证、证书与问卷。它对持有链接且输入买家邮箱的人开放,因此可以放心地在自定义网站里再次展示。请在服务端按后端已认证的人过滤后构建页面:- 报名(
GET …/registrations?email=)——按邮箱精确过滤。每条带status、票种、自行渲染二维码时用的checkinCode,以及passUrl——可直接链接的托管入场凭证页。 - 重新生成链接(
POST …/registrations/{id}/rotate-access-token)——此前的全部地址立即失效。响应携带新的passUrl。链接被转发到不该去的地方时使用。 - 权益(
GET …/registrations/{id}/perks)——票种 ∪ 兑换码 ∪ 个人授予的生效并集。 - 签到记录(
GET …/checkins?registrationId=)——使用历史。 - 订单——购买历史,各带
orderUrl。
约束
- 一单一座。 报名模型是一人一活动一报名,一张订单最多承载一个票座(超出
412)。替朋友买票时,每人一单、各用各的邮箱。加购数量不受此限。 - 在这个调用面上,订单号就是订单的凭证。 在服务端像对待该买家的会话令牌一样保管它。托管页面还会额外要求买家输入订单邮箱。
- 待确认订单占位 15 分钟。 付费单确认后占位拉长到 35 分钟。用
POST …/orders/{orderNumber}/cancel提前释放。重复取消只被确认。 - 结账会话不占位,直到买家从中下单;24 小时后过期。过期会话与从不存在的会话返回同一个
404。 - 重新生成凭证链接不可撤销。 之后请重新发送票务邮件(或在站点里展示新的
passUrl)。 - 业务单元未配置收款(未完成 Stripe 入驻)时,付费下单返回
412。免费路径不受影响。 - 自动化与票务邮件和平台自己的结账完全同源 ——下单/过期/取消与报名类触发器行为一致。
相关页面
端点参考
会话、place、confirm、cancel 的结构。
订单(控制台视角)
主办方如何查看同一批订单。