logo

食谱

团队计费

Spark 默认情况下使用基于“用户”的计费。如果您的应用程序使用团队或其他模型进行计费,则需要相应地调整 Spark 安装。我们将使用团队计费实现作为示例,在以下文档中逐步介绍这些调整。

要将 App\Models\Team 模型设为我们的可计费模型,首先需要调整 Spark 的服务提供者。

更新服务提供者

现在,我们应该更新 SparkServiceProvider 以引用 Team 模型而不是 User 模型

php
use App\Models\Team;
use Spark\Spark;

class SparkServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        // Resolve the current team...
        Spark::billable(Team::class)->resolve(function (Request $request) {
            return $request->user()->currentTeam;
        });

        // Verify that the current user owns the team...
        Spark::billable(Team::class)->authorize(function (Team $billable, Request $request) {
            return $request->user() &&
                   $request->user()->id == $billable->user_id;
        });

        Spark::billable(Team::class)->checkPlanEligibility(function (Team $billable, Plan $plan) {
            // ...
        });
    }
}

更新模型

现在,我们可以更新 Team 模型以使用 Spark\Billable 特性,并实现一个 paddleEmail 方法,该方法返回团队所有者的电子邮件地址,以便在 Paddle 仪表板中显示为客户标识符

php
use Spark\Billable;

class Team extends JetstreamTeam
{
    use Billable;

    public function paddleEmail(): string|null
    {
        return $this->owner->email;
    }
}

Spark 配置文件

最后,更新应用程序的 config/spark.php 配置文件,使其定义一个 team 可计费模型

php
use App\Models\Team;

'billables' => [
    'team' => [
        'model' => Team::class,

        'plans' => [
            // ...
        ],
    ],
]