#Stripe API에서 스케줄 등록을 발표하면 어떤 일이 발생합니까? 서브스크립션은 스케줄 등록의 손을 떠나 독자적으로 달리는 것 같다. (#ruby + Stripe API)

17656 단어 스트라이프루비

포인트



스케줄 등록이 출시된 후
  • Subscription schedule이 비어 있습니다
  • SubscriptionSchedule 의 subscription 가 하늘이 되었다
  • 현재 단계에서 Subscription의 cancel_at이 삭제되었으며, 왜냐하면 스케줄 등록에 정리된 다음 단계가 없어져 종료일도 없어진 것이라고 생각되는 아마. 경우에 따라서는 거동이 다르고, 각각 스케줄 등록의 관리를 떠난 경우로서, 적절한 행동을 하는 것은 아닐까.

  • BEFORE





    AFTER






    Ruby Code example


    # Docs
    
    # https://stripe.com/docs/api/subscription_schedules/release
    # https://support.stripe.com/questions/create-update-and-schedule-subscriptions
    # https://stripe.com/docs/billing/subscriptions/subscription-schedules
    
    # 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 "https://dashboard.stripe.com/test/subscription_schedules/#{subscription_schedule.id}"
      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')
    
    subscription = started_subscription_schedule.subscription
    
    started_subscription_schedule.subscription # #<StripeSubscription: ...
    started_subscription_schedule.phases.size # 3
    
    puts '-' * 100
    puts "Subscription created"
    puts "https://dashboard.stripe.com/test/subscriptions/#{subscription.id}"
    puts '-' * 100
    puts subscription
    
    Stripe::SubscriptionSchedule.release(started_subscription_schedule.id)
    
    released_subscription_schedule = Stripe::SubscriptionSchedule.retrieve(id: subscription_schedule.id, expand: ['subscription'])
    
    # SubscriptionSchedule now has no "subscription" but has phases ( not used ? )
    released_subscription_schedule.subscription # nil
    released_subscription_schedule.phases.size # 3
    
    released_subscription = Stripe::Subscription.retrieve(subscription.id)
    
    removed_from_subscription_by_released_schedule =  subscription.to_a - released_subscription.to_a
    # Subscription "cancel_at" removed by Subscription release
    # e.g
    # => [[:cancel_at, 1585720051], [:canceled_at, 1577857651], [:schedule, "sub_sched_1Fw03HCmti5jpytUpJMypWcA"]]
    
    

    Original by Github issue

    좋은 웹페이지 즐겨찾기