【问题标题】:Stripe & Laravel how to upgrade or downgrade session subscription?Stripe & Laravel 如何升级或降级会话订阅?
【发布时间】:2021-04-30 11:26:03
【问题描述】:

我在使用 Laravel Cashier 创建订阅时遇到了一些问题。

首先,我从我的后端创建一个包,它调用以下两个 Strip 函数:

public function createStripeProduct(array $data)
{
    $product = $this->stripe->products->create([
        'name' => $data['title']." ".appName(),
    ]);
    
    return $product->id;
}

public function createStripePrice(array $data)
{
    $price = $this->stripe->prices->create([
        'unit_amount' => $data['price'] * $this->multiple,
        'currency' => $this->currency,
        'recurring' => ['interval' => 'month'],
        'product' => $data['stripe_prod_id'],
    ]);
    
    return $price->id;
}

然后在我的控制器中,我正在创建会话:

public function create(Request $request)
{
    $key = config('services.stripe.secret');
    $stripe = new Stripe\StripeClient($key);
    $stripeCustomer = $user->createOrGetStripeCustomer();

    $checkout_session = $stripe->checkout->sessions->create([
        'customer' => $stripeCustomer['id'],
        'success_url' =>  route('frontend.user.account'),
        'cancel_url' => route('frontend.user.account'),
        'payment_method_types' => ['card'],
        'line_items' => [
            [
                'price' => $request->stripe_price_id,
                'quantity' => 1,
            ],
        ],
        'mode' => 'subscription',
        'allow_promotion_codes' => true,
    ]);

    return $checkout_session['id'];
}

到目前为止一切正常,但通过实施,我可以多次订阅同一个或不同包的使用。

我怎样才能防止这种情况发生,以及如何实现包的未来升级/降级?

【问题讨论】:

    标签: laravel stripe-payments laravel-cashier


    【解决方案1】:

    回答你的两个问题:

    1) 我可以多次订阅同一个包或不同包。我怎样才能防止这种情况发生

    您的代码正在获取 createOrGetStripeCustomer() 中的 Stripe Customer 对象。您可以使用 https://stripe.com/docs/api/subscriptions/list#list_subscriptions-customer 列出客户的所有订阅,然后检查是否要在该客户上创建额外的 CheckoutSession 订阅。

    2) 如何实现 Package 的未来升级/降级?

    您可以在此处使用代码 sn-ps:https://stripe.com/docs/billing/subscriptions/upgrade-downgrade#changing,您可以在其中使用新的价格 ID 更新订阅的 SubscriptionItem。

    $sub = \Stripe\Subscription::update('sub_123', [
      'cancel_at_period_end' => false,
      'proration_behavior' => 'create_prorations',
      'items' => [
        [
          'id' => $subscription->items->data[0]->id,
          'price' => 'price_456', // the new Price to update to
        ],
      ],
    ]);
    

    【讨论】:

      猜你喜欢
      • 2015-09-03
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 2020-11-18
      • 2011-07-24
      • 1970-01-01
      相关资源
      最近更新 更多