没有这样的计划:每月;一个名称为 monthly,但它的 ID 是主要的 Laravel Cashier

No such plan: monthly; one exists with a name of monthly, but its ID is primary Laravel Cashier

在 Stripe 测试中遇到这个问题。一切都曾经在测试中工作,但是当我在 Stripe 中创建一个新计划并删除原来的计划时,我现在收到以下错误:

No such plan: monthly; one exists with a name of monthly, but its ID is primary.

控制器

$user->newSubscription('primary', 'monthly')->create($token, [ ]);

计划详情

ID: primary
Name: monthly
Price: .99 USD/month
Trial period: No trial

php artisan config:clear 没有帮助。我正在使用 Laravel 5.2 和 Cashier 6.0.

.env 文件

STRIPE_KEY=pk_test_...
STRIPE_SECRET=sk_test_....

config/services.php

'stripe' => [
    'model'  => App\User::class,
    'key'    => env('STRIPE_KEY'),
    'secret' => env('STRIPE_SECRET'),
],

改用这个:

$user->newSubscription('primary', 'primary')->create($token, [ ]);

来自文档:

The first argument passed to the newSubscription method should be the name of the subscription. The second argument is the specific Stripe plan the user is subscribing to. This value should correspond to the plan's identifier in Stripe.

所以第二个参数必须等于我的 Stripe 计划中的 ID 值!在这种情况下,该值是 primary,而不是 monthly

区分产品标识符和计划标识符很重要。也许自从编写了许多教程以来,stripe 已经发生了变化。我花了几个小时才认出这一点。由于我是 stripe 新手,所以很容易找到产品和产品 ID,但很难找到计划 ID。事实上,我必须从产品页面 "export plans" 到 CSV 文件才能获得计划 ID 的 ID。

希望这能帮助像我一样迷路的人

主要问题是您在 newSubscription() 的第二个参数中传递的是计划名称而不是计划 ID。 应该是这样的

$user->newSubscription('main' , 'plan_GNxxxxxxx')->create($request->stripeToken,[ ]);

$user->newSubscription('XXXX', 'price_XXXXXXX')->create($request->stripeToken);

步骤:

  1. 为条带帐户创建订阅(测试模式)。
  2. 订阅中需要创建一个带有数量和价格以及循环选项的产品。
  3. 创建产品后,您可以在“产品”菜单中看到一个产品,单击它并找到 API ID。
  4. 所以最后在函数newSubscription()中,第一个参数是你在创建它时写的订阅名称,第二个参数是产品下的APP ID。