0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

#Stripe API 経由で サブスクリプションの 「スケジュールされた更新を管理する」をやりたい。( with #Ruby )

Last updated at Posted at 2020-01-02

Dashboard

ダッシュボードから簡単にできることがAPIではなかなか難しいように思えた。

image

Points

  • 必要とされるフェーズを全てupdateの内容として与え直す必要がありそうだ。
  • 例えばフェーズが3個あり、そのうち2個目だけを削除したいという場合、1個目と3個目をupdateの値として与え直す必要がありそうだ。つまり、既存のSubscriptionScheduleからupdateの値を組み立て直さなければ行けないのではないだろうか。
  • スケジュール登録の最初のフェーズが既に開始済み、つまりスケジュール登録が既にアクティブの場合、フェーズの最初の一個に、現在のフェーズの開始日時と同じ start_date を指定する必要がありそうだ。
  • 既に開始済みの現在のフェーズで、期間を変えることはできないように思えた。たぶん。
  • ところでSubscriptionSchedule を作成するときはイテレーション指定ができるが、データとしては start_date / end_date とプランの期間でイテレーションを管理していそうだ。

Stripeの基本

日本正式リリースしたStripeを使ってサブスクリプション型決済システムを実装する - Qiita
https://qiita.com/tady/items/7617e62b2a5402ebd0fb

Stripe Billing 101 - Qiita
https://qiita.com/y_toku/items/235b5e7ee00792edcbbf

Stripe初心者のための基本的な使い方(Rails編) - Qiita
https://qiita.com/ryouzi/items/6ee8f277471aa3b02f7b

Docs

https://support.stripe.com/questions/create-update-and-schedule-subscriptions
https://stripe.com/docs/billing/subscriptions/subscription-schedules
https://stripe.com/docs/api/subscription_schedules/object#subscription_schedule_object-phases

Code

# Code

require 'stripe'

Stripe::api_key = ENV['STRIPE_SECRET_KEY']

product1 = Stripe::Product.create(name: "Gold plan #{rand(9999999999)}")
plan1 = Stripe::Plan.create(interval: 'month', currency: 'jpy', amount: 5000, product: product1.id, usage_type: 'licensed')

product2 = Stripe::Product.create(name: "Silver plan #{rand(9999999999)}")
plan2 = Stripe::Plan.create(interval: 'month', currency: 'jpy', amount: 3000, product: product2.id, usage_type: 'licensed')

product3 = Stripe::Product.create(name: "Bronse plan #{rand(9999999999)}")
plan3 = Stripe::Plan.create(interval: 'month', currency: 'jpy', amount: 1000, product: product3.id, usage_type: 'licensed')

tax_rate = Stripe::TaxRate.create(display_name: 'Tax Rate', percentage: 10.0, inclusive: false)
customer = Stripe::Customer.create
payment_method = Stripe::PaymentMethod.create(type: 'card', card: { number: '4242424242424242', exp_year: 2030, exp_month: 01})
customer_payment_method = Stripe::PaymentMethod.attach(payment_method.id, customer: customer.id)

def put_subscription_schedule(subscription_schedule, message)
  puts '-' * 100
  puts "Subscription Schedule"
  puts message
  puts '-' * 100
  puts subscription_schedule
end


# https://stripe.com/docs/api/subscription_schedules/create
subscription_schedule = Stripe::SubscriptionSchedule.create(
  {
    customer: customer.id,
    start_date: Time.now.to_i + 5,
    default_settings: {
      default_payment_method: customer_payment_method.id,
    },
    phases: [
      {
        plans:
          [
            { plan: plan1.id, quantity: 1 },
            { plan: plan2.id, quantity: 4 },
          ],
          default_tax_rates: [tax_rate],
          iterations: 3,
      },
      {
        plans:
          [
            { plan: plan2.id, quantity: 1 },
            { plan: plan3.id, quantity: 1 },
          ],
          default_tax_rates: [tax_rate],
          iterations: 5,
      },
      {
        plans:
          [
            { plan: plan3.id, quantity: 3 },
            { plan: plan1.id, quantity: 2 },
          ],
          default_tax_rates: [tax_rate],
          iterations: 7,
      }
    ],
  }
)
put_subscription_schedule(subscription_schedule, 'CREATED')

puts '-' * 100
puts "Wait until subscription schedule starts"
puts '-' * 100
until subscription_schedule.status == 'active' do
  subscription_schedule = Stripe::SubscriptionSchedule.retrieve(subscription_schedule.id)
  puts subscription_schedule.status
  sleep 2
end

started_subscription_schedule = Stripe::SubscriptionSchedule.retrieve(id: subscription_schedule.id, expand: ['subscription'])
put_subscription_schedule(started_subscription_schedule, 'STARTED')

puts '-' * 100
puts "Subscription created"
puts "https://dashboard.stripe.com/test/subscriptions/#{started_subscription_schedule.subscription.id}"
puts '-' * 100
puts started_subscription_schedule.subscription

# Build update phases structure from first created subscription schedule
#
# SubscriptionSchedule has no "iterations" property in it self
# Because it handles iterations by start_date / end_date and cycle of plans
update_subscription_schedule_phases = subscription_schedule.phases.map do |phase|
  plans = phase.plans.map do |plan|
    { plan: plan.plan, quantity: plan.quantity }
  end;

  {
    plans: plans,
    default_payment_method: phase.default_payment_method,
    start_date: phase.start_date,
    end_date: phase.end_date,
  }
end

# Example
# Keep current phase but remove next come phases
updated_subscription_schedule = Stripe::SubscriptionSchedule.update(
  subscription_schedule.id,
  {
    phases: [
      update_subscription_schedule_phases[0]
    ]
  }
)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')

# Example
# Update and reset to same phases on subscription shcedule created
updated_subscription_schedule = Stripe::SubscriptionSchedule.update(
  subscription_schedule.id,
  {
    phases: update_subscription_schedule_phases
  }
)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')

# Stripe::InvalidRequestError: You can only adjust the end date to a future date for the current phase.
#
# updated_subscription_schedule = Stripe::SubscriptionSchedule.update(
#   subscription_schedule.id,
#   {
#     phases: [update_subscription_schedule_phases[1]]
#   }
# )

# https://stripe.com/docs/api/subscription_schedules/update
#
# no customer id because already knows customer
# no start_date because already set start_date when created
#
# If
#   no phases has start_date
# Then
#   Stripe::InvalidRequestError: The subscription schedule update is missing at least one phase with a `start_date` to anchor end dates to.
#
# If
#   not equal subscription_schedule.current_phase.start_date
#     e.g
#     update_start_date_set_on_first_phase = subscription_schedule.current_phase.start_date + 1
#     update_start_date_set_on_first_phase = subscription_schedule.current_phase.start_date - 1
# Then
#   Stripe::InvalidRequestError: You can only adjust the end date to a future date for the current phase.
# This message seems strange for me
update_start_date_set_on_first_phase = subscription_schedule.current_phase.start_date

# Example
# Update and shuffle phases and subscriptions
updated_subscription_schedule = Stripe::SubscriptionSchedule.update(
  subscription_schedule.id,
  {
    phases: [
      {
        plans:
          [
            { plan: plan1.id, quantity: [*1..10].sample },
            { plan: plan2.id, quantity: [*1..10].sample },
          ],
          default_payment_method: customer_payment_method.id,
          default_tax_rates: [tax_rate],
          iterations: [*1..10].sample,
          start_date: update_start_date_set_on_first_phase,
      },
      {
        plans:
          [
            { plan: plan2.id, quantity: [*1..10].sample },
            { plan: plan3.id, quantity: [*1..10].sample },
          ],
          default_payment_method: customer_payment_method.id,
          default_tax_rates: [tax_rate],
          iterations: [*1..10].sample,
      }
    ]
  }
)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')

In Dashboard - Created

image

In Dashboard - Started

image
image

In Dashboard - Updated

image

In Dashboard - Updated

image

In Dashboard - Updated

image

Run

$ STRIPE_SECRET_KEY=sk_test_xxxx ruby ~/tmp/stripe-subscription.rb
----------------------------------------------------------------------------------------------------
Subscription Schedule
CREATED
----------------------------------------------------------------------------------------------------
{
  "id": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
  "object": "subscription_schedule",
  "canceled_at": null,
  "completed_at": null,
  "created": 1577854767,
  "current_phase": null,
  "customer": "cus_GSv9dlPfWQnUzM",
  "default_settings": {
    "billing_thresholds": null,
    "collection_method": "charge_automatically",
    "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
    "default_source": null,
    "invoice_settings": null
  },
  "end_behavior": "release",
  "livemode": false,
  "metadata": {
  },
  "phases": [
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1585717172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 4,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1577854772,
      "tax_percent": 10.0,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1598936372,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 1,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1585717172,
      "tax_percent": 10.0,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1617253172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 3,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 2,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1598936372,
      "tax_percent": 10.0,
      "trial_end": null
    }
  ],
  "released_at": null,
  "released_subscription": null,
  "renewal_interval": null,
  "revision": "sub_sched_rev_1FvzIpCmti5jpytUnnlu1fqt",
  "status": "not_started",
  "subscription": null
}
----------------------------------------------------------------------------------------------------
Wait until subscription schedule starts
----------------------------------------------------------------------------------------------------
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
not_started
active
----------------------------------------------------------------------------------------------------
Subscription Schedule
STARTED
----------------------------------------------------------------------------------------------------
{
  "id": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
  "object": "subscription_schedule",
  "canceled_at": null,
  "completed_at": null,
  "created": 1577854767,
  "current_phase": {
    "end_date": 1585717172,
    "start_date": 1577854772
  },
  "customer": "cus_GSv9dlPfWQnUzM",
  "default_settings": {
    "billing_thresholds": null,
    "collection_method": "charge_automatically",
    "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
    "default_source": null,
    "invoice_settings": null
  },
  "end_behavior": "release",
  "livemode": false,
  "metadata": {
  },
  "phases": [
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1585717172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 4,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1577854772,
      "tax_percent": 10.0,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1598936372,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 1,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1585717172,
      "tax_percent": 10.0,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1617253172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 3,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 2,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1598936372,
      "tax_percent": 10.0,
      "trial_end": null
    }
  ],
  "released_at": null,
  "released_subscription": null,
  "renewal_interval": null,
  "revision": "sub_sched_rev_1FvzIpCmti5jpytUnnlu1fqt",
  "status": "active",
  "subscription": {
    "id": "sub_GSvAZCbL0Ya2Dz",
    "object": "subscription",
    "application_fee_percent": null,
    "billing_cycle_anchor": 1577854772,
    "billing_thresholds": null,
    "cancel_at": 1585717172,
    "cancel_at_period_end": false,
    "canceled_at": 1577854772,
    "collection_method": "charge_automatically",
    "created": 1577854772,
    "current_period_end": 1580533172,
    "current_period_start": 1577854772,
    "customer": "cus_GSv9dlPfWQnUzM",
    "days_until_due": null,
    "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
    "default_source": null,
    "default_tax_rates": [
      {
        "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
        "object": "tax_rate",
        "active": true,
        "created": 1577854765,
        "description": null,
        "display_name": "Tax Rate",
        "inclusive": false,
        "jurisdiction": null,
        "livemode": false,
        "metadata": {
        },
        "percentage": 10.0
      }
    ],
    "discount": null,
    "ended_at": null,
    "invoice_customer_balance_settings": {
      "consume_applied_balance_on_void": true
    },
    "items": {
      "object": "list",
      "data": [
        {
          "id": "si_GSvAdhvFrqOTic",
          "object": "subscription_item",
          "billing_thresholds": null,
          "created": 1577854834,
          "metadata": {
          },
          "plan": {
            "id": "plan_GSv96AVCPo5AnI",
            "object": "plan",
            "active": true,
            "aggregate_usage": null,
            "amount": 5000,
            "amount_decimal": "5000",
            "billing_scheme": "per_unit",
            "created": 1577854764,
            "currency": "jpy",
            "interval": "month",
            "interval_count": 1,
            "livemode": false,
            "metadata": {
            },
            "nickname": null,
            "product": "prod_GSv9N2AIVdvrAr",
            "tiers": null,
            "tiers_mode": null,
            "transform_usage": null,
            "trial_period_days": null,
            "usage_type": "licensed"
          },
          "quantity": 1,
          "subscription": "sub_GSvAZCbL0Ya2Dz",
          "tax_rates": [

          ]
        },
        {
          "id": "si_GSvAgKooNc96qR",
          "object": "subscription_item",
          "billing_thresholds": null,
          "created": 1577854834,
          "metadata": {
          },
          "plan": {
            "id": "plan_GSv9Ppg630rR1B",
            "object": "plan",
            "active": true,
            "aggregate_usage": null,
            "amount": 3000,
            "amount_decimal": "3000",
            "billing_scheme": "per_unit",
            "created": 1577854765,
            "currency": "jpy",
            "interval": "month",
            "interval_count": 1,
            "livemode": false,
            "metadata": {
            },
            "nickname": null,
            "product": "prod_GSv9wehfuUCd9Z",
            "tiers": null,
            "tiers_mode": null,
            "transform_usage": null,
            "trial_period_days": null,
            "usage_type": "licensed"
          },
          "quantity": 4,
          "subscription": "sub_GSvAZCbL0Ya2Dz",
          "tax_rates": [

          ]
        }
      ],
      "has_more": false,
      "total_count": 2,
      "url": "/v1/subscription_items?subscription=sub_GSvAZCbL0Ya2Dz"
    },
    "latest_invoice": "in_1FvzJtCmti5jpytURRXRx3j8",
    "livemode": false,
    "metadata": {
    },
    "next_pending_invoice_item_invoice": null,
    "pending_invoice_item_interval": null,
    "pending_setup_intent": null,
    "plan": null,
    "quantity": null,
    "schedule": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
    "start_date": 1577854772,
    "status": "active",
    "tax_percent": 10.0,
    "trial_end": null,
    "trial_start": null
  }
}
----------------------------------------------------------------------------------------------------
Subscription created
https://dashboard.stripe.com/test/subscriptions/sub_GSvAZCbL0Ya2Dz
----------------------------------------------------------------------------------------------------
{
  "id": "sub_GSvAZCbL0Ya2Dz",
  "object": "subscription",
  "application_fee_percent": null,
  "billing_cycle_anchor": 1577854772,
  "billing_thresholds": null,
  "cancel_at": 1585717172,
  "cancel_at_period_end": false,
  "canceled_at": 1577854772,
  "collection_method": "charge_automatically",
  "created": 1577854772,
  "current_period_end": 1580533172,
  "current_period_start": 1577854772,
  "customer": "cus_GSv9dlPfWQnUzM",
  "days_until_due": null,
  "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
  "default_source": null,
  "default_tax_rates": [
    {
      "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
      "object": "tax_rate",
      "active": true,
      "created": 1577854765,
      "description": null,
      "display_name": "Tax Rate",
      "inclusive": false,
      "jurisdiction": null,
      "livemode": false,
      "metadata": {
      },
      "percentage": 10.0
    }
  ],
  "discount": null,
  "ended_at": null,
  "invoice_customer_balance_settings": {
    "consume_applied_balance_on_void": true
  },
  "items": {
    "object": "list",
    "data": [
      {
        "id": "si_GSvAdhvFrqOTic",
        "object": "subscription_item",
        "billing_thresholds": null,
        "created": 1577854834,
        "metadata": {
        },
        "plan": {
          "id": "plan_GSv96AVCPo5AnI",
          "object": "plan",
          "active": true,
          "aggregate_usage": null,
          "amount": 5000,
          "amount_decimal": "5000",
          "billing_scheme": "per_unit",
          "created": 1577854764,
          "currency": "jpy",
          "interval": "month",
          "interval_count": 1,
          "livemode": false,
          "metadata": {
          },
          "nickname": null,
          "product": "prod_GSv9N2AIVdvrAr",
          "tiers": null,
          "tiers_mode": null,
          "transform_usage": null,
          "trial_period_days": null,
          "usage_type": "licensed"
        },
        "quantity": 1,
        "subscription": "sub_GSvAZCbL0Ya2Dz",
        "tax_rates": [

        ]
      },
      {
        "id": "si_GSvAgKooNc96qR",
        "object": "subscription_item",
        "billing_thresholds": null,
        "created": 1577854834,
        "metadata": {
        },
        "plan": {
          "id": "plan_GSv9Ppg630rR1B",
          "object": "plan",
          "active": true,
          "aggregate_usage": null,
          "amount": 3000,
          "amount_decimal": "3000",
          "billing_scheme": "per_unit",
          "created": 1577854765,
          "currency": "jpy",
          "interval": "month",
          "interval_count": 1,
          "livemode": false,
          "metadata": {
          },
          "nickname": null,
          "product": "prod_GSv9wehfuUCd9Z",
          "tiers": null,
          "tiers_mode": null,
          "transform_usage": null,
          "trial_period_days": null,
          "usage_type": "licensed"
        },
        "quantity": 4,
        "subscription": "sub_GSvAZCbL0Ya2Dz",
        "tax_rates": [

        ]
      }
    ],
    "has_more": false,
    "total_count": 2,
    "url": "/v1/subscription_items?subscription=sub_GSvAZCbL0Ya2Dz"
  },
  "latest_invoice": "in_1FvzJtCmti5jpytURRXRx3j8",
  "livemode": false,
  "metadata": {
  },
  "next_pending_invoice_item_invoice": null,
  "pending_invoice_item_interval": null,
  "pending_setup_intent": null,
  "plan": null,
  "quantity": null,
  "schedule": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
  "start_date": 1577854772,
  "status": "active",
  "tax_percent": 10.0,
  "trial_end": null,
  "trial_start": null
}
----------------------------------------------------------------------------------------------------
Subscription Schedule
UPDATED
----------------------------------------------------------------------------------------------------
{
  "id": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
  "object": "subscription_schedule",
  "canceled_at": null,
  "completed_at": null,
  "created": 1577854767,
  "current_phase": {
    "end_date": 1585717172,
    "start_date": 1577854772
  },
  "customer": "cus_GSv9dlPfWQnUzM",
  "default_settings": {
    "billing_thresholds": null,
    "collection_method": "charge_automatically",
    "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
    "default_source": null,
    "invoice_settings": {
      "days_until_due": null
    }
  },
  "end_behavior": "release",
  "livemode": false,
  "metadata": {
  },
  "phases": [
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [

      ],
      "end_date": 1585717172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 4,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1577854772,
      "tax_percent": null,
      "trial_end": null
    }
  ],
  "released_at": null,
  "released_subscription": null,
  "renewal_interval": null,
  "revision": "sub_sched_rev_1FvzJzCmti5jpytUKNbp8VYS",
  "status": "active",
  "subscription": "sub_GSvAZCbL0Ya2Dz"
}
----------------------------------------------------------------------------------------------------
Subscription Schedule
UPDATED
----------------------------------------------------------------------------------------------------
{
  "id": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
  "object": "subscription_schedule",
  "canceled_at": null,
  "completed_at": null,
  "created": 1577854767,
  "current_phase": {
    "end_date": 1585717172,
    "start_date": 1577854772
  },
  "customer": "cus_GSv9dlPfWQnUzM",
  "default_settings": {
    "billing_thresholds": null,
    "collection_method": "charge_automatically",
    "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
    "default_source": null,
    "invoice_settings": {
      "days_until_due": null
    }
  },
  "end_behavior": "release",
  "livemode": false,
  "metadata": {
  },
  "phases": [
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [

      ],
      "end_date": 1585717172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 4,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1577854772,
      "tax_percent": null,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [

      ],
      "end_date": 1598936372,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 1,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 1,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1585717172,
      "tax_percent": null,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": null,
      "default_tax_rates": [

      ],
      "end_date": 1617253172,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 3,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 2,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1598936372,
      "tax_percent": null,
      "trial_end": null
    }
  ],
  "released_at": null,
  "released_subscription": null,
  "renewal_interval": null,
  "revision": "sub_sched_rev_1FvzJzCmti5jpytUr8Kbu64A",
  "status": "active",
  "subscription": "sub_GSvAZCbL0Ya2Dz"
}
----------------------------------------------------------------------------------------------------
Subscription Schedule
UPDATED
----------------------------------------------------------------------------------------------------
{
  "id": "sub_sched_1FvzIpCmti5jpytUmHomKTmD",
  "object": "subscription_schedule",
  "canceled_at": null,
  "completed_at": null,
  "created": 1577854767,
  "current_phase": {
    "end_date": 1598936372,
    "start_date": 1577854772
  },
  "customer": "cus_GSv9dlPfWQnUzM",
  "default_settings": {
    "billing_thresholds": null,
    "collection_method": "charge_automatically",
    "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
    "default_source": null,
    "invoice_settings": {
      "days_until_due": null
    }
  },
  "end_behavior": "release",
  "livemode": false,
  "metadata": {
  },
  "phases": [
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1598936372,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv96AVCPo5AnI",
          "quantity": 8,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 5,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1577854772,
      "tax_percent": 10.0,
      "trial_end": null
    },
    {
      "application_fee_percent": null,
      "billing_thresholds": null,
      "collection_method": null,
      "coupon": null,
      "default_payment_method": "pm_1FvzIoCmti5jpytUfcf56qXP",
      "default_tax_rates": [
        {
          "id": "txr_1FvzInCmti5jpytUipQ6xVGU",
          "object": "tax_rate",
          "active": true,
          "created": 1577854765,
          "description": null,
          "display_name": "Tax Rate",
          "inclusive": false,
          "jurisdiction": null,
          "livemode": false,
          "metadata": {
          },
          "percentage": 10.0
        }
      ],
      "end_date": 1601528372,
      "invoice_settings": null,
      "plans": [
        {
          "billing_thresholds": null,
          "plan": "plan_GSv9Ppg630rR1B",
          "quantity": 5,
          "tax_rates": [

          ]
        },
        {
          "billing_thresholds": null,
          "plan": "plan_GSv99o5yLatFvT",
          "quantity": 2,
          "tax_rates": [

          ]
        }
      ],
      "prorate": true,
      "start_date": 1598936372,
      "tax_percent": 10.0,
      "trial_end": null
    }
  ],
  "released_at": null,
  "released_subscription": null,
  "renewal_interval": null,
  "revision": "sub_sched_rev_1FvzK0Cmti5jpytUwEbq4ePj",
  "status": "active",
  "subscription": "sub_GSvAZCbL0Ya2Dz"
}

Original by Github issue

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?