Утро, столкнулся с проблемой с подписками на полосы, решение которой я не могу найти. У нас есть сайт, который предлагает 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']);
}
}