PAYATHON 2026

Laravel billing block 未显示,是否遗漏配置?

支付阿杰

结论

通常并不是 billing block 安装失败,而是 Spark 没有读取到可用的订阅计划,或者计费服务商尚未配置完成。全新安装 Laravel Spark 6.0 后,安装依赖并不会自动生成可购买的套餐。你还需要定义 plans,并配置 Stripe 或 Braintree 的凭据。

检查订阅计划

先打开 app/Providers/SparkServiceProvider.php。Spark 检测到已定义的计划后,才会显示对应的订阅和计费界面。

以 Stripe 为例,配置通常类似下面这样:

<?php

namespace App\Providers;

use Laravel\Spark\Spark;
use Laravel\Spark\Providers\SparkServiceProvider as ServiceProvider;

class SparkServiceProvider extends ServiceProvider
{
    public function booted()
    {
        Spark::plan('Basic', 'basic-monthly')
            ->price(10)
            ->features([
                'Feature A',
                'Feature B',
            ]);

        Spark::plan('Pro', 'pro-monthly')
            ->price(29)
            ->features([
                'Feature A',
                'Feature B',
                'Feature C',
            ]);
    }
}

需要注意:

  • basic-monthly 和 pro-monthly 必须与计费服务商后台创建的 plan ID 完全一致。
  • price() 中的金额应与服务商后台设置的套餐价格一致。
  • Spark 6.0 的不同小版本和计费驱动可能使用略有差异的方法名或服务提供者结构,请以项目中生成的 SparkServiceProvider 为准。

如果项目使用团队计费,还要检查计划是否定义成了团队计划。个人计划和团队计划不会出现在同一个订阅入口中。

配置计费服务商

检查 .env,确认已经填写所选计费服务商要求的凭据。使用 Stripe 时,一般需要设置:

STRIPE_KEY=pk_test_xxxxxxxxxxxxx
STRIPE_SECRET=sk_test_xxxxxxxxxxxxx

如果使用 Braintree,则需要配置对应的 merchant、public key 和 private key。具体变量名应以项目现有的 config/services.php 或 Spark 6.0 安装时生成的配置为准,不要直接套用其他 Spark 版本的变量名。

修改 .env 或配置文件后,清除相关缓存:

php artisan config:clear
php artisan cache:clear
php artisan view:clear

检查数据库和前端资源

确认 Spark 所需的数据库迁移已经执行:

php artisan migrate

如果页面框架已经显示,但 billing 区域仍然空白或渲染异常,可以重新构建前端资源。旧版 Spark 项目通常根据现有依赖配置使用以下命令:

npm install
npm run dev

还要查看浏览器开发者工具中的 Console 和 Network 面板。JavaScript 异常或接口返回 401、403、500,都可能导致 billing block 无法渲染。

还需要确认的情况

billing block 是否显示也可能与当前用户的状态有关:

  • 用户需要先登录。
  • 部分计费入口只对已验证邮箱的用户开放。
  • 已订阅用户和未订阅用户看到的界面可能不同。
  • 团队订阅通常只能由团队 owner 管理。
  • 如果修改过 Spark 的 Vue 组件、导航菜单或布局,计费入口可能已经被覆盖或移除。

建议先确认 SparkServiceProvider 中是否定义了至少一个有效 plan。如果完全没有调用 Spark::plan(...),这通常就是全新安装后看不到 billing block 的直接原因。

备注:内容仅供参考。