ПРОБЛЕМЫ с обновлением подписки Stripe, пока пробная версия еще активна PHP

1
5

Утро, столкнулся с проблемой с подписками на полосы, решение которой я не могу найти. У нас есть сайт, который предлагает 14 бесплатных пробных версий при первой подписке клиента на один из двух наших планов — ежемесячно (14,99) / ежегодно (149,99). Проблема, с которой я постоянно сталкиваюсь, — это управление изменением подписки с помощью обновления подписки или расписания подписки. если подписка все еще находится в течение этих 14 дней пробной версии, по какой-либо причине при переходе во время пробной версии всегда выставляется счет, охватывающий период, выбранный пользователем (например, если пользователь выбрал ежемесячный план, с него взимается плата в размере 14,99 сразу при переходе, а затем при следующий счет 141,77, но новый платежный цикл правильный и включает пробный период, как и ожидалось) до сих пор я пробовал:

1 — составить график подписки в конце пробного периода, чтобы переключиться на новый план

2 — обновить подписку напрямую, если она все еще находится на этапе пробной версии:

В документации, похоже, нет примера для этого, мы уже пытались сделать это с порталом ранее и это вело себя еще более непредсказуемо (даже с отключенным пропорциональным соотношением и т. д.).

Пока единственное, что мне удалось выяснить, это то, что полоса запускает это событие (может быть перехвачено в конечной точке веб-перехватчиков, которую мы настраиваем) - Пробная версия заканчивается на цену_xxxxx каждый раз, когда вы меняете пробную подписку, что, в свою очередь, приводит к выставлению первого счета.

Интересно, есть ли у кого-нибудь здесь некоторый опыт и, возможно, он сможет помочь указать на ошибку в этих подходах.

$phases = array(
    [
    'items' => [
      [
        'price' => $current_price_id,
        'quantity' => 1,
      ],
     ],
    'start_date' => $subscription->current_period_start,
    'end_date' => $free_trial, // End of the current period
    'trial_end' => $free_trial,
    'proration_behavior' => 'none'                        
  ],
  [
    'items' => [
      [
        'price' => $new_price_id,
         'quantity' => 1,
      ],
  ],
    'start_date' => $free_trial, // Start after the current period ends
    'trial_end' => $free_trial,
    'billing_cycle_anchor' => 'period_start',
    'proration_behavior' => 'none',
  ],
);           
 $stripe->subscriptions->update(
  $current_subscription_id,
   [
'items' => [
[
'id' => $subscription->items->data[0]->id,
'price' => $new_price_id, // New price ID
],
],
'proration_behavior' => 'none',
'trial_end' => $free_trial,//THIS IS A TIMESTAMP I HAVE IN THE DB
'billing_cycle_anchor' => 'unchanged',
],
);

3 - both of the above adding invoice deletion after the change

// If there's an invoice generated during the trial, it needs to be voided
$invoices = \Stripe\Invoice::all(['subscription' => $subscription->id]);
foreach ($invoices->data as $invoice) {
    if ($invoice->status === 'open') {
      // Update invoice status to void
      \Stripe\Invoice::update($invoice->id, ['status' => 'void']);
    }
}
Кондратий
Вопрос задан15 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.