#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby
19408 단어 스트라이프
포인트
Docs
htps : // st 리페. 코 m / 두 cs / bit g / su bsc p chion s / su bsc p chion s chi ぇ s s
htps : // st 리페. 코 m / 두 cs / 병 g / su bsc p chion s / su bsc p p chion-s chi zu s / use-kase s
htps : // st 리페. 코 m / 두 cs / 아피 / 스 bsc 리 p 치온
htps : // 꼬리 rt. st 리페. 코 m / 쿠에 s 치온 s / c Rete-p p-te-an ds Chi-Zu-bsc Ri p Chion s
Stripe의 기본
일본 공식 출시한 Stripe를 사용하여 구독형 결제 시스템 구현 - Qiita
htps : // m / dy / / ms / 7617 e62b2 a 5402 e bd0fb
Stripe Billing 101 - Qiita
htps : // 이 m / y_ 토쿠 / ms / 235b5에 7 예 00792 에 dc bf
Stripe 초보자를 위한 기본적인 사용법(Rails편) - Qiita
htps : // 코 m / 료 / ms / 6 예 8f277471 아 3b02f7b
코드
require 'stripe'
Stripe::api_key = ENV['STRIPE_SECRET_KEY']
product1 = Stripe::Product.create(name: "Gold plan #{rand(9999999999)}")
plan1 = Stripe::Plan.create(interval: 'day', currency: 'jpy', amount: 5000, product: product1.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
puts '-' * 100
puts "https://dashboard.stripe.com/test/subscription_schedules/#{subscription_schedule.id}"
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 },
],
default_tax_rates: [tax_rate],
},
],
}
)
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
def update_subscription_schedule(base_subscription_schedule, end_from_start_date: )
Stripe::SubscriptionSchedule.update(
base_subscription_schedule.id,
{
end_behavior: 'cancel',
phases: [
{
plans:
[
{
plan: base_subscription_schedule.phases[0].plans[0].plan,
quantity: base_subscription_schedule.phases[0].plans[0].quantity
},
],
default_tax_rates: [base_subscription_schedule.phases[0].default_tax_rates[0].id],
start_date: base_subscription_schedule.phases[0].start_date,
end_date: base_subscription_schedule.phases[0].start_date + end_from_start_date
},
]
}
)
end
# STEP A
# Set subscrition canceled in one day, fit to plan natural cycle "day"
# It does not create proration adjustment or Upcoming invoice Because subscription schedule cycle is smart finishing.
#
# Happens events kinds are ...
# subscription_schedule.updated
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 24*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP B
# Set subscrition canceled in half a day.
# Not wait natural plan interval end.
# It makes proration adjustment half price of plan in Upcoming invoice.
#
# Unused time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal -¥2,500
# Tax Rate (10%) -¥250
# Total -¥2,750
# Applied balance ¥2,750
# Amount due ¥0
#
# Happens events kinds are ...
# subscription_schedule.updated
# customer.subscription.updated
# invoiceitem.created
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 12*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP C
# Set subscription back natural full ony day.
# It makes Upcoming Invoice plice zero
#
# Time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / ¥2,500
# Unused time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal ¥0
# Tax Rate (10%) ¥0
# Total ¥0
# Amount due ¥0
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 24*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP D
# Gold plan 5392253972 / 1 / ¥5,000 / ¥5,000
# Unused time on Gold plan 5392253972 after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal ¥2,500
# Tax Rate (10%) ¥250
# Total ¥2,750
# Amount due ¥2,750
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 36*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
BEFORE UPDATE
무기한 구독이므로 종료일이 설정되지 않았습니다.
다음 번 청구도 예약되었습니다.
STEP A
Ends was set
구독이 현재 기간에 끝나도록 설정한 경우
종료일이 설정됨
다음 번 청구가 사라졌습니다.
STEP B
Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 경우
다음 번 청구에서 조정 금액이 발생했습니다.
STEP C
다음 Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 후 하루로 되돌린 경우
다음 번 청구에서 조정 금액에 대해 추가 조정 금액이 발생하여 청구가 0 엔입니다.
STEP D
Original by Github issue
Reference
이 문제에 관하여(#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YumaInaura/items/1ba3ef6be2cbde89f204
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
일본 공식 출시한 Stripe를 사용하여 구독형 결제 시스템 구현 - Qiita
htps : // m / dy / / ms / 7617 e62b2 a 5402 e bd0fb
Stripe Billing 101 - Qiita
htps : // 이 m / y_ 토쿠 / ms / 235b5에 7 예 00792 에 dc bf
Stripe 초보자를 위한 기본적인 사용법(Rails편) - Qiita
htps : // 코 m / 료 / ms / 6 예 8f277471 아 3b02f7b
코드
require 'stripe'
Stripe::api_key = ENV['STRIPE_SECRET_KEY']
product1 = Stripe::Product.create(name: "Gold plan #{rand(9999999999)}")
plan1 = Stripe::Plan.create(interval: 'day', currency: 'jpy', amount: 5000, product: product1.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
puts '-' * 100
puts "https://dashboard.stripe.com/test/subscription_schedules/#{subscription_schedule.id}"
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 },
],
default_tax_rates: [tax_rate],
},
],
}
)
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
def update_subscription_schedule(base_subscription_schedule, end_from_start_date: )
Stripe::SubscriptionSchedule.update(
base_subscription_schedule.id,
{
end_behavior: 'cancel',
phases: [
{
plans:
[
{
plan: base_subscription_schedule.phases[0].plans[0].plan,
quantity: base_subscription_schedule.phases[0].plans[0].quantity
},
],
default_tax_rates: [base_subscription_schedule.phases[0].default_tax_rates[0].id],
start_date: base_subscription_schedule.phases[0].start_date,
end_date: base_subscription_schedule.phases[0].start_date + end_from_start_date
},
]
}
)
end
# STEP A
# Set subscrition canceled in one day, fit to plan natural cycle "day"
# It does not create proration adjustment or Upcoming invoice Because subscription schedule cycle is smart finishing.
#
# Happens events kinds are ...
# subscription_schedule.updated
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 24*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP B
# Set subscrition canceled in half a day.
# Not wait natural plan interval end.
# It makes proration adjustment half price of plan in Upcoming invoice.
#
# Unused time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal -¥2,500
# Tax Rate (10%) -¥250
# Total -¥2,750
# Applied balance ¥2,750
# Amount due ¥0
#
# Happens events kinds are ...
# subscription_schedule.updated
# customer.subscription.updated
# invoiceitem.created
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 12*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP C
# Set subscription back natural full ony day.
# It makes Upcoming Invoice plice zero
#
# Time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / ¥2,500
# Unused time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal ¥0
# Tax Rate (10%) ¥0
# Total ¥0
# Amount due ¥0
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 24*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP D
# Gold plan 5392253972 / 1 / ¥5,000 / ¥5,000
# Unused time on Gold plan 5392253972 after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal ¥2,500
# Tax Rate (10%) ¥250
# Total ¥2,750
# Amount due ¥2,750
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 36*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
BEFORE UPDATE
무기한 구독이므로 종료일이 설정되지 않았습니다.
다음 번 청구도 예약되었습니다.
STEP A
Ends was set
구독이 현재 기간에 끝나도록 설정한 경우
종료일이 설정됨
다음 번 청구가 사라졌습니다.
STEP B
Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 경우
다음 번 청구에서 조정 금액이 발생했습니다.
STEP C
다음 Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 후 하루로 되돌린 경우
다음 번 청구에서 조정 금액에 대해 추가 조정 금액이 발생하여 청구가 0 엔입니다.
STEP D
Original by Github issue
Reference
이 문제에 관하여(#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YumaInaura/items/1ba3ef6be2cbde89f204
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
require 'stripe'
Stripe::api_key = ENV['STRIPE_SECRET_KEY']
product1 = Stripe::Product.create(name: "Gold plan #{rand(9999999999)}")
plan1 = Stripe::Plan.create(interval: 'day', currency: 'jpy', amount: 5000, product: product1.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
puts '-' * 100
puts "https://dashboard.stripe.com/test/subscription_schedules/#{subscription_schedule.id}"
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 },
],
default_tax_rates: [tax_rate],
},
],
}
)
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
def update_subscription_schedule(base_subscription_schedule, end_from_start_date: )
Stripe::SubscriptionSchedule.update(
base_subscription_schedule.id,
{
end_behavior: 'cancel',
phases: [
{
plans:
[
{
plan: base_subscription_schedule.phases[0].plans[0].plan,
quantity: base_subscription_schedule.phases[0].plans[0].quantity
},
],
default_tax_rates: [base_subscription_schedule.phases[0].default_tax_rates[0].id],
start_date: base_subscription_schedule.phases[0].start_date,
end_date: base_subscription_schedule.phases[0].start_date + end_from_start_date
},
]
}
)
end
# STEP A
# Set subscrition canceled in one day, fit to plan natural cycle "day"
# It does not create proration adjustment or Upcoming invoice Because subscription schedule cycle is smart finishing.
#
# Happens events kinds are ...
# subscription_schedule.updated
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 24*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP B
# Set subscrition canceled in half a day.
# Not wait natural plan interval end.
# It makes proration adjustment half price of plan in Upcoming invoice.
#
# Unused time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal -¥2,500
# Tax Rate (10%) -¥250
# Total -¥2,750
# Applied balance ¥2,750
# Amount due ¥0
#
# Happens events kinds are ...
# subscription_schedule.updated
# customer.subscription.updated
# invoiceitem.created
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 12*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP C
# Set subscription back natural full ony day.
# It makes Upcoming Invoice plice zero
#
# Time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / ¥2,500
# Unused time on Gold plan xxxxxxxx after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal ¥0
# Tax Rate (10%) ¥0
# Total ¥0
# Amount due ¥0
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 24*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
# STEP D
# Gold plan 5392253972 / 1 / ¥5,000 / ¥5,000
# Unused time on Gold plan 5392253972 after 02 Jan 2020 / 1 / -¥2,500
#
# Subtotal ¥2,500
# Tax Rate (10%) ¥250
# Total ¥2,750
# Amount due ¥2,750
updated_subscription_schedule = update_subscription_schedule(subscription_schedule, end_from_start_date: 36*60*60)
put_subscription_schedule(updated_subscription_schedule, 'UPDATED')
무기한 구독이므로 종료일이 설정되지 않았습니다.
다음 번 청구도 예약되었습니다.
STEP A
Ends was set
구독이 현재 기간에 끝나도록 설정한 경우
종료일이 설정됨
다음 번 청구가 사라졌습니다.
STEP B
Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 경우
다음 번 청구에서 조정 금액이 발생했습니다.
STEP C
다음 Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 후 하루로 되돌린 경우
다음 번 청구에서 조정 금액에 대해 추가 조정 금액이 발생하여 청구가 0 엔입니다.
STEP D
Original by Github issue
Reference
이 문제에 관하여(#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YumaInaura/items/1ba3ef6be2cbde89f204
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 경우
다음 번 청구에서 조정 금액이 발생했습니다.
STEP C
다음 Upcoming invoice occurs
현재 기간의 구독 기간을 반나절로 줄인 후 하루로 되돌린 경우
다음 번 청구에서 조정 금액에 대해 추가 조정 금액이 발생하여 청구가 0 엔입니다.
STEP D
Original by Github issue
Reference
이 문제에 관하여(#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YumaInaura/items/1ba3ef6be2cbde89f204
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Original by Github issue
Reference
이 문제에 관하여(#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YumaInaura/items/1ba3ef6be2cbde89f204
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(#Stripe API/구독 스케줄 등록에서 종료일을 설정하여 취소했을 때의 일일 계산적인 조정액 = 인보이스 확인/with Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YumaInaura/items/1ba3ef6be2cbde89f204텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)