完整流程
1
展示在售内容
用
GET …/ticket-types(票名、价格、售卖窗口、状态)、…/availability(实时剩余数字)、…/addons、…/bundles、…/venues、…/sessions(议程)、…/speakers(讲者)渲染你的活动页。买家输入兑换码时,先用 GET …/redemption-codes/lookup?code= 预览——解锁的票(隐藏票也在内)、附带的权益、折后价,在下单之前就能展示。购物车是你前端自己的状态——Orriven 在结算那一刻才第一次听说它。2
下单
201 返回待确认订单——它会占位 15 分钟。已在该活动报过名的买家得到 200 和 alreadyRegistered: true:被确认,绝不重复占位。票已满则 412。3
确认——免费当场结清,付费拿 Stripe 支付页
- 免费订单(总额 0)当场结清:
{"status":"paid", "registration":{…}, "created":true}——完成,全程不碰 Stripe。 - 付费订单返回
{"status":"awaiting_payment", "paymentUrl":"https://checkout.stripe.com/…"}。把买家重定向过去;successUrl/cancelUrl是 Stripe 把买家送回你的网站的地址(付费单必填,仅限 https——本地开发允许 http://localhost)。
4
等待结算
付款经平台的 Stripe webhook 结算,而不是经你这次调用。买家回到你的
successUrl 后,轮询 GET …/orders/{orderId} 直到 status 变为 paid 且 registrationId 已填——那一刻,座位、权益、签到码都已存在。5
搭建买家的用户中心
「我的票」页面需要的一切,你的后端都能按登录买家的邮箱过滤读取:
- 报名(
GET …/registrations)——状态、票种、以及渲染成入场二维码的checkinCode; - 权益(
GET …/registrations/{id}/perks)——票种 ∪ 兑换码 ∪ 个人授予的生效并集; - 签到记录(
GET …/checkins?registrationId=)——使用历史; - 订单——购买历史。
会咬人的规则
- 一单一座。 报名模型是一人一活动一报名,一张订单最多承载一个票座(超出
412)——替朋友买票 = 每人一单、各用各的邮箱。加购项数量不受此限。 - 订单号就是订单的凭证 ——在你的服务端像对待该买家的会话令牌一样保管它。
- 待确认订单占位 15 分钟;付费单确认后占位拉长到 35 分钟。用
POST …/orders/{orderNumber}/cancel提前释放;重复取消只被确认。 - 付费单确认必须带
successUrl/cancelUrl——缺了会在任何事发生之前收到400。 - 业务单元未配置收款(未完成 Stripe 入驻)时,付费下单返回
412;免费路径不受影响。 - 自动化与平台自己的结账完全同源 ——下单/过期/取消与报名类触发器行为一致。
相关页面
端点参考
place、confirm、cancel 的精确结构。
订单(控制台视角)
同一批订单在主办方眼中的样子。