如何在Stripe,Rails中保存客户卡更新?

时间:2016-05-25 15:04:49

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

我希望客户能够在我的Rails应用中更新其信用卡详细信息。 Stripe有关于如何实现这一目标的文档,但本文在PHP中展示了一个示例,但我需要一个Rails示例:https://stripe.com/docs/recipes/updating-customer-cards

基本上,我需要保存客户的信用卡而不收费。

这是subscribers_controller.rb

class SubscribersController < ApplicationController        
  before_filter :authenticate_user!

  def new
  end

  def update
    token = params[:stripeToken]

    customer = Stripe::Customer.create(
      card: token,
      plan: 1212,
      email: current_user.email
    )

    current_user.subscribed = true
    current_user.stripeid = customer.id
    current_user.save

    redirect_to profiles_user_path
  end
end

2 个答案:

答案 0 :(得分:4)

您可能还想查看此SO回答How to create a charge and a customer in Stripe ( Rails),了解有关在Rails应用程序中使用Stripe的更多详细信息。

对于Ruby文档,您可以在Stripe Ruby API上找到很好的示例。在条纹术语中,客户称卡为source。您可以从source创建token,但一旦创建,您就可以处理Customer对象上的sourcedefault_source元素,并检索{{ 1}}来自客户card的对象。另请注意,除了创建source(或一次性费用)之外,您绝不应尝试使用token

Stripe Ruby API for Customers表示您可以创建source并同时分配customer

source

必须分配customer = Stripe::Customer.create( source: token, email: current_user.email ) 来创建客户。但是,如果您在订阅时设置了客户,则需要source可用,并且将向客户source收取费用。如果客户只有一个default_source,则会自动为source

Stripe Ruby API for Cards表示您还可以使用令牌向现有客户添加新卡:

default_source

将卡分配给客户后,您可以使用此卡将其设为customer = Stripe::Customer.retrieve(customer_id) customer.sources.create({source: token_id})

default_source

这就是设置和准备开始向客户收费所需要的。快乐结算!

答案 1 :(得分:1)

要更新现有客户的卡,您提到的PHP配方中的相关代码段为:

$cu = \Stripe\Customer::retrieve($customer_id); // stored in your application
$cu->source = $_POST['stripeToken']; // obtained with Checkout
$cu->save();

在Ruby中,这将是:

cu = Stripe::Customer.retrieve(customer_id)
cu.source = params[:stripeToken]
cu.save

这将使用stripeToken参数中包含的令牌使用该卡更新现有客户。