【问题标题】:Stripe - action on charge succeeded条纹 - 收费行动成功
【发布时间】:2013-11-26 05:47:18
【问题描述】:

我刚刚开始使用 Stripe,并按照他们的指南设置checkout with Rails

就我而言,我让用户能够升级事件列表。

在我的事件模型中,我有一个 make_premium 方法:

  def make_premium
    self.update_attribute(:premium_event, true)
  end 

我的 event_controller 的升级操作基于 Stripe 的创建示例,除了我添加了一个 repond_to 块以将用户带回他们升级的事件并调用 make_premium 方法。

  def upgrade
    @event = Event.find_by_slug(params[:id])
    # Amount in pence
    @amount = 299

    customer = Stripe::Customer.create(
      :email => current_user.email,
      :card  => params[:stripeToken]
    )

    charge = Stripe::Charge.create(
      :customer    => customer.id,
      :amount      => @amount,
      :description => 'Premium Event Upgrade',
      :currency    => 'gbp',
      :metadata => {'event_id' => @event.id, 'event_headline' => @event.headline}
    )

    respond_to do |format|
       format.html { redirect_to @event, :notice => 'Event was successfully upgraded.' }
       @event.make_premium
    end

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to event_path(@event)
  end

我想知道的是,a) 考虑到随后的救援情况,在这里可以使用对块的响应,并且 b) 可以从该块中调用我的 make_premium 方法吗?

我已经尝试过使用 Stripe 的 webhook,虽然charge.suceeded 钩子运行良好,但如果上述方法足够,我可以避免额外的步骤。

如果对 Stripe 有更多经验的人提供任何见解,我们将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 stripe-payments


    【解决方案1】:

    我几乎可以肯定,您可以在方法中的任何位置使用 rescue 块,如果发生异常,它将被调用。

    我建议的唯一潜在更改是添加检查以确保属性已成功更新。

    def upgrade
        @event = Event.find_by_slug(params[:id])
        # Amount in pence
        @amount = 299
    
        customer = Stripe::Customer.create(
          :email => current_user.email,
          :card  => params[:stripeToken]
        )
    
        charge = Stripe::Charge.create(
          :customer    => customer.id,
          :amount      => @amount,
          :description => 'Premium Event Upgrade',
          :currency    => 'gbp',
          :metadata => {'event_id' => @event.id, 'event_headline' => @event.headline}
        )
    
        respond_to do |format|
           if @event.make_premium
             format.html { redirect_to @event, :notice => 'Event was successfully upgraded.' }
           else
             // handle error and redirect
           end
        end
    
        rescue Stripe::CardError => e
          flash[:error] = e.message
          redirect_to event_path(@event)
      end
    

    【讨论】:

    • 好吧,这很有道理。我会添加的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多