会员门户与订阅账单
你的会员门户位于 /learn/<slug>——一个供会员登录的门户,与 MailInApp 仪表盘、以及任何 Firebase Auth 账户完全无关。账单是你自己连接的 Stripe 账户上真实的 Stripe 订阅,与商品结账所使用的同一个 Connect 账户,只是在此扩展为循环订阅/账单能力。
认领你的门户 URL
在设置 → 会员门户下,认领一个 <slug>(3–40 个字符,小写字母/数字/连字符)——与发件人资料标识符相同的认领与重命名方式,只是它自己独立的字段。这就是你在营销活动以及其他任何推广会员制度的地方要链接到的 URL;之后可以重命名而不会影响现有会员的访问权限。
设置价格
同样在设置 → 会员门户下,添加一个或多个订阅套餐——名称、循环扣款金额、按月或按年的计费周期,外加一个可选的按天计的免费试用期。每个套餐都会 1:1 映射到你所连接账户上的一个 Stripe Price。套餐一经创建就无法删除(Stripe Price 同样无法删除),只能归档——归档后的套餐会从公开的订阅页面消失,但对已订阅它的任何人依然有效,因此归档永远不会切断现有会员的访问权限。
订阅流程
/learn/<slug>/subscribe?plan=<planId> 是你从营销活动链接过去的公开页面。可以将它设为按钮模块的链接目标,或者使用内置的订阅工作室预制组合(标题+文本+按钮,与体育队伍垂直领域的"比分板"预制组合采用相同的"由现有模块组合而成,不新增模块类型"方式)。
访客选择一个套餐,并通过订阅模式下的真实 Stripe Checkout 会话完成结账。结账完成后,会创建或按邮箱匹配一条 Subscriber(会员)记录,并发出一封欢迎邮件,其中带有一个可直接进入门户的链接。
无需 MailInApp 账户即可登录
会员永远不会创建 MailInApp 账户。在 /learn/<slug> 登录使用的是免密登录链接:他们输入自己的邮箱,一条一键登录链接会通过你自己的 SMTP/品牌样式(而不是 Firebase 的默认模板)发送给他们。这一步有速率限制,并且刻意从不透露该邮箱是否已经订阅。点击该链接即可证明其拥有该邮箱地址,并将其登录进这个特定会员门户。
观看课时
每一次课时播放请求都会执行一次实时的逐请求资格核验——不是像倒计时或日历端点那样使用长期有效的签名链接。每当会员打开一个课时,MailInApp 都会先检查其当前订阅状态,再铸造一个短期有效的播放令牌。失去访问权限(订阅被取消或逾期未付)会在紧接着的下一次请求时立即生效,而不必等到下一次页面加载。标记为免费试看的课时会完全跳过此项核验,任何到达门户的人都可以播放。
管理现有订阅
/learn/<slug>/account 为已登录的会员提供一个管理账单按钮,会跳转到 Stripe 自己托管的客户门户——更新银行卡、切换套餐,或取消订阅——而不是由 MailInApp 自行重新实现订阅管理功能。
账单事件发生时会怎样
- 结账完成 → 创建或匹配会员记录,订阅被激活,发送带有门户链接的欢迎邮件。
- 扣款失败 → 会员会收到一封催缴邮件,指向
/learn/<slug>/account以更新银行卡,同时 Stripe 会自动重试扣款——MailInApp 不会在第一次失败时就改变访问权限,只有当 Stripe 自己报告该订阅已不再有效时才会改变。 - 订阅被取消(由会员本人取消,或催缴重试全部失败后)→ 对受限课时和直播场次的访问权限终止,并发出一封取消通知邮件,附带一个返回
/learn/<slug>/subscribe的链接,以便他们想要重新订阅。