すでに有料会員となっている顧客のサブスクリプション料金の変更を行う場合、ダッシュボードからであれば「サブスクリプションの更新」から行える。ただし、一括変更ができないので一件一件手動で行う必要がある。
すべての顧客に対して一括変更を行う場合は、プログラミングを書く必要がある。
以下はPHPを使った一括変更の例。
<?php
// ダウンロードしたStripeのPHPライブラリのinit.phpを読み込む
//require_once('/home/hoge/stripe-php/init.php'); //手動でダウンロードした場合は init.php になるらしい
require_once('/var/stripe_composer/vendor/autoload.php');
// APIのシークレットキー(本番 or テスト)
\Stripe\Stripe::setApiKey('sk_live_xxxxxxxxxxxxxxxxxxxxxxx');
//変更前と変更後のプライスID(旧名称はプランID)
$old_price_id = "price_yyyyyyyyy";
$new_price_id = "price_xxxxxxxxx";
date_default_timezone_set('Asia/Tokyo'); // 日本時間に設定
// Unixタイムスタンプで2025年1月1日を指定
// $start_date = strtotime('2025-01-01 00:00:00');
// $end_date = strtotime('2025-01-01 23:59:59');
// サブスクリプションを取得
$subscriptions = \Stripe\Subscription::all([
'limit' => 100, // 1回のリクエストで取得する件数。100が上限
で、それ以上取得する場合は別の書き方が必要。
'status' => 'active', // アクティブなサブスクリプションのみ
'price' => $old_price_id, // 置き換える前のプライスIDを指定
'current_period_end' => [
'gte' => strtotime('2025-01-01 00:00:00'), // 2025年1月1日以降
'lte' => strtotime('2025-01-31 23:59:59'), // 2025年1月31日以前
],
]);
// 件数を取得して表示
$subscription_count = count($subscriptions->data);
echo "取得したサブスクリプションの件数: " . $subscription_count . "\n<br><br>";
foreach ($subscriptions->data as $subscription) {
echo "Customer ID: " . $subscription->customer . "<br>\n";
echo "Subscription ID: " . $subscription->id . "<br>\n";
$next_payment_date = $subscription->current_period_end; //サブスクリプションの次回請求日をUnixタイムスタンプで取得
echo $next_payment_date . "\n<br>";
$formatted_date = date('Y-m-d H:i:s', $next_payment_date);
echo "日本時間での次回請求日: " . $formatted_date . "\n<br>";
//アイテムIDを取得して新しいプライスIDに置き換える
$subscription_item_id = $subscription->items->data[0]->id; // 最初のアイテムIDを取得
\Stripe\Subscription::update(
$subscription->id,
[
'items' => [
[
'id' => $subscription_item_id,
'price' => $new_price_id, // 新しいプライスID
],
],
'proration_behavior' => 'none', //差額請求なし(次回請求時から新料金を適用)
]
);
echo "Updated subscription: " . $subscription->id . "<br><br><br>\n";
}