Skip to content

建议 Creator Pro/Plus 的付费资源加密支持第三方订单校验 / 自定义订单来源 #3

Description

@YcFeller

建议:Creator Pro 付费资源增加第三方订单校验接口

目前 Creator Pro 的付费资源加密/解密安装能力已经支持通过爱发电订单系统进行购买资格校验。

这个机制对于使用爱发电售卖资源的创作者非常方便,但对于已经拥有自己官网、商城或订单系统的创作者来说,目前似乎只能依赖爱发电的订单校验机制,扩展性会受到一些限制。

因此想建议是否可以考虑将 Creator Pro 的订单验证机制抽象成可配置的第三方订单校验 Provider,在保留现有爱发电支持的同时,增加一个「自定义订单验证」选项。

大致设想

允许创作者自行配置一个用于订单/授权验证的 HTTPS API,例如:

用户购买资源
    ↓
创作者自己的商城 / 官网订单系统
    ↓
用户通过 AstroBox 尝试安装加密资源
    ↓
AstroBox 请求创作者配置的验证 API
    ↓
创作者服务器验证订单/授权状态
    ↓
返回是否具有该资源的安装权限
    ↓
验证通过后继续现有的加密资源解密安装流程

API 可以由创作者自行实现,AstroBox 只需要按照约定的协议进行请求和解析结果即可。

例如允许配置:

  • API Endpoint
  • GET / POST
  • Authorization Token / Secret
  • 资源 ID
  • 订单号 / License ID 等参数
  • 返回结果中的授权状态字段
  • 可选的签名验证

这样就可以支持:

  • 自建官网订单系统
  • WordPress / WooCommerce
  • 自己开发的商城
  • 其他第三方商城
  • 自定义 License / 授权系统

而不需要 AstroBox 针对每一个平台单独开发适配。


另外一个设想:Webhook

如果条件允许,也希望可以考虑增加类似爱发电 Webhook 的机制。

例如允许创作者配置:

https://example.com/api/astrobox/webhook

当订单发生状态变化时,将事件通知给创作者自己的服务器,例如:

订单支付成功
订单退款
订单取消
授权撤销

这样创作者可以在自己的服务器中维护资源授权状态。

例如:

订单系统
   │
   ├── 支付成功 ──→ Webhook ──→ 授权数据库
   │
   └── 退款 ─────→ Webhook ──→ 撤销授权
                                      │
                                      ↓
                              AstroBox 验证授权

这样 AstroBox 在实际安装时只需要查询:

这个用户是否拥有 resource_xxx 的有效授权?

而不需要了解创作者具体使用的是哪个订单平台。

Webhook 如果实现的话,可以考虑加入:

  • Secret / Token
  • HMAC 签名
  • Timestamp
  • Event ID

等机制,用于防止伪造和重复请求。


我认为这个功能的价值

这样 Creator Pro 的付费资源体系就可以从:

Creator Pro
    ↓
爱发电订单
    ↓
授权

进一步扩展为:

                    ┌── 爱发电
                    │
Creator Pro ────────┼── 自建商城
                    │
                    ├── WooCommerce
                    │
                    └── 自定义订单系统

爱发电仍然可以作为默认/官方支持的订单来源,而有自己业务系统的创作者可以通过自定义 Provider 接入。

这样既不会影响现有用户,也能让 Creator Pro 的付费资源能力对独立开发者和拥有自有商城的创作者更加友好。

如果目前 Creator Pro 的资源授权机制在架构上已经有类似 Provider / Adapter 的设计,那么感觉这个功能应该也比较适合作为一个扩展点来实现。

如果不希望开放过于复杂的自定义 API,也可以先提供一个比较简单的标准化接口协议,只需要返回 authorized: true/false 以及对应的资源 ID 即可。具体的订单验证逻辑完全由创作者自己的服务器负责。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions