首页 文章

已有用户时创建条带订阅

提问于
浏览
1

在我的情况下 - 我使用Stripe with Rails,并且用户可以支付一次性“费用”,或者订阅并且每次都可以免费获得一定数量的费用 . 月 .

创建费用后 - 我将 stripe_customer_id 保存在PG数据库中 .

但是,如果用户想要订阅,我想将其添加到Stripe客户,而不是创建一个新客户 .

如果创建一个新的,它会像这样:

customer_data = {
  email: params[:stripeEmail],
  card: params[:stripeToken]
}.merge(
  (monthly_plan.payment_offerings_plan.blank?) ?
    {} : { plan: Payment_offering.find(monthly_plan.payment_offerings_plan).stripe_plan_id }
)

customer = Stripe::Customer.create customer_data

基本上 - 如何在Stripe中向已经存在的Stripe客户添加订阅?

1 回答

  • 2

    所有这一切都可以在优秀的Ruby API Docs中找到 . 涉及几个步骤,但并不是那么难 . 可能需要一些实验才能使其在您的应用程序中运行

    创建默认来源

    客户必须具有为订阅费用分配的默认来源 . 这可以从令牌创建,如下所示:

    customer.sources.create({:source => token_id})
    

    如果您已经为用户分配了卡片,则可以从客户现有的卡片中分配:

    customer.default_source = customer.sources.retrieve(card_id)
    

    创建订阅计划

    您可以在Stripe控制台上轻松创建订阅计划,因为这通常是一次性活动;构建用于管理订阅计划的UI几乎肯定是过度杀伤,除非您有管理员用户可以管理订阅计划,但不应该访问Stripe控制台 .

    要以编程方式创建订阅计划,请尝试以下操作:

    Stripe::Plan.create(
      :amount => 4200,         #<== Amount is in cents, not dollars
      :interval => "month",
      :name => "Purple Plan",
      :currency => "usd",
      :id => "purple"
    )
    

    您可以根据需要创建任意数量的计划,并可以将用户订阅到他们喜欢的任何计划 .

    为客户创建订阅

    此时,您可以在客户上创建订阅,这将启动结算过程 .

    Stripe::Subscription.create(
      :customer => customer,
      :plan => "purple"
    )
    

    设置Web Hook接收器

    出于某种原因,此文档位于不同的位置(请参阅Webhooks),但这是该过程中非常必要的部分 . 这将使您的应用程序得到通知

    def PaymentController protect_from_forgery:except =>:webhook

    def webhook#从webhook参数中捕获事件信息event_id = params [:event]

    # Verify that the event isn't forged to your Stripe account
    event = Stripe::Event.retrieve(event_id)
    
    # Record the event
    PaymentEvents.create!(event)
    
    # Handle the event in terms of your application
    #...
    

    结束

    从Stripe发送的事件类型记录在Types of Events . 你可以选择捕捉并处理一些,同时让别人通过 . 但是,在我的应用程序中,我更好地捕获并记录所有事件,然后根据需要处理它们 . 这样,如果您错过了处理后来变得非常重要的事件,您可以引用事件并在事后处理它 .

    收取定期付款

    这是一个简单的部分,最好用你最喜欢的冷饮来完成 . 从这一点开始,您需要做的就是监控Stripe控制台和您的银行帐户 . 无需其他操作,因为Stripe会处理其余的事情 .

相关问题