先划边界:自研还是用插件
会员体系的复杂度分三块:用户身份与登录、会员等级与权益、权限校验。前两块与 WordPress 的用户系统、角色体系高度重合,成熟插件已覆盖大部分通用需求;第三块与业务强绑定,往往是插件最难满足的部分。
因此建议的划分是:身份与等级用成熟能力,权限校验与业务规则自研。具体判断标准有三条:
- 会员分层规则是否与业务强耦合(如按订单、按积分、按邀请关系)?
- 是否需要与站内内容类型做细粒度映射(如某分类仅某等级可见)?
- 是否存在插件无法覆盖的定制流程?
只要有一条为「是」,就应当把相应的校验逻辑握在自己手里,而不是硬塞进插件配置。
会员分层与内容权限
分层设计的关键是把「等级」与「权益」解耦。等级是用户属性,权益是内容属性,两者通过一张映射表关联,而不是把等级判断写死进模板。
- 内容侧:给文章/页面增加一个「可见性」字段(公开、登录可见、指定等级可见);
- 用户侧:用户挂载一个等级标识;
- 校验侧:统一由一个函数判断「当前用户能否查看该内容」,所有模板和接口都调这个函数。
这样做的好处是:新增等级只改映射表,不触碰模板;日后要改成「按订阅状态判断」,也只需替换校验函数的实现。
支付接入的落地路径
支付接入可以统一为四步,与具体支付通道无关:
- 下单:后端生成站内订单记录(含订单号、金额、状态),先落库再调通道;
- 请求支付参数:调用通道接口换取拉起支付所需的参数,交由前端发起;
- 接收异步回调:通道回调到达后端,必须先验签,确认请求来源可信;
- 更新订单与权益:验签通过后更新订单状态,并发放对应权益。
这里有两个不可省略的点:验签与幂等。验签防止伪造回调;幂等防止通道重复推送导致权益被重复发放——实现方式通常是以订单号做唯一约束,重复请求直接返回成功而不重复发货。
权限校验应该放在哪一层
这是最容易出问题的地方。原则只有一条:客户端不做权限裁定。
前端可以隐藏入口、置灰按钮,这是体验优化;但真正的校验必须发生在服务端——无论是页面渲染前的钩子,还是接口返回前。原因很直接:前端的一切判断都可以被绕过,只有服务端是可信边界。
实践上建议在校验函数里同时处理三件事:未登录返回登录引导、等级不足返回明确提示、内容不存在与无权限不作区分(避免通过枚举探测内容是否存在)。
小结
会员与支付不是「装个插件就完事」的功能,而是涉及信任链的工程问题。把等级与权益解耦、把校验统一收口到服务端、把验签与幂等做在回调链路上,这三件事做扎实,剩下的才是运营层面的玩法设计。