【问题标题】:Stripe - Creating a new card for customerStripe - 为客户创建一张新卡
【发布时间】:2014-03-08 00:38:34
【问题描述】:

我正在尝试实现客户创建新卡的功能。

我创建了一个表单,客户可以在其中创建新卡:

<table class="table">
<%= simple_form_for(@user, :url => billing_path, html: {class: 'form-horizontal' }) do |f| %>
  <tr>
    <td>Country</td>
    <td><%= f.text_field :saddress_country, value: card1.address_country %> </td>
  </tr>
  <tr>
    <td>Billing Address</td>
    <td><%= f.text_field :sbilling_address1, value: card1.address_line1 %> </td>
    <td><%= f.text_field :sbilling_address2, value: card1.address_line2 %> </td>
  </tr>
  <tr>
    <td>City / State / Zip</td>
    <td><%= f.text_field :saddress_city, value: card1.address_city %> </td>
    <td><%= f.text_field :saddress_state, value: card1.address_state %> </td>
    <td><%= f.text_field :saddress_zip, value: card1.address_zip %> </td>
  </tr>
  <tr>
    <td>Credit Card Number </td>
    <td><%= f.text_field :scardnumber, placeholder: card1.last4, value: cardnumberempty %></td>
    <td><%= f.text_field :scvc, placeholder: "CVC", value: cvcempty %></td>
  </tr>
  <tr>
    <td>Card's Info</td>
    <td><%= f.text_field :sname, value: card1.name %> </td>
    <td><%= f.text_field :sexp_month, value: card1.exp_month %> </td>
    <td><%= f.text_field :sexp_year, value: card1.exp_year %> </td>
  </tr>
  <tr><td><%= f.submit %></td></tr>
<% end %>
</table>

然后在控制器中获取信息并创建新卡:

  def create_card_stripe
    @user = current_user
    customer = Stripe::Customer.retrieve(current_user.stripe_customer_token)

    customer.cards.create({
      :card => current_user.stripe_card_token,
      :number => params[:user][:scardnumber],
      :exp_month => params[:user][:sexp_month],
      :exp_year => params[:user][:sexp_year],
      :cvc => params[:user][:scvc],
      :name => params[:user][:sname],
      :address_line1 => params[:user][:saddress_line1],
      :address_line2 => params[:user][:saddress_line2],
      :address_city => params[:user][:saddress_city],
      :address_zip => params[:user][:saddress_zip],
      :address_state => params[:user][:saddress_state],
      :address_country => params[:user][:saddress_country]
      })

    @user.update_attribute(:stripe_card_id, customer.active_card.id)
    if customer.save
      flash.alert = "Billing information updated successfully!"
      redirect_to edit_user_registration_path
    else
      flash.alert = "Stripe error"
      redirect_to edit_user_registration_path
    end
  end

当我提交表单时,我收到来自 Stripe 的以下错误: "收到未知参数:number、exp_month、exp_year、cvc、name、address_city、address_zip、address_state、address_country"。

所以它说的是我发送了错误的参数。但是如果你检查here,那些参数就在那里(子参数)。

关于我做错了什么的任何线索?任何关于如何使用 Stripe API 创建新卡片的指导都会非常有帮助。谢谢。

【问题讨论】:

    标签: ruby-on-rails stripe-payments


    【解决方案1】:

    有两种使用 Stripe 添加卡片的方法。

    1) 使用卡片令牌。如果你有一个令牌,就像你一样,你不需要其他任何东西,所以你可以做

    customer.cards.create({
      :card => current_user.stripe_card_token
    })
    

    2) 你也可以这样做:

    customer.cards.create({
      :card => {
         :number => params[:user][:scardnumber],
         :exp_month => params[:user][:sexp_month],
         :exp_year => params[:user][:sexp_year],
         :cvc => params[:user][:scvc],
         :name => params[:user][:sname],
         :address_line1 => params[:user][:saddress_line1],
         :address_line2 => params[:user][:saddress_line2],
         :address_city => params[:user][:saddress_city],
         :address_zip => params[:user][:saddress_zip],
         :address_state => params[:user][:saddress_state],
         :address_country => params[:user][:saddress_country]
      }
    })
    

    正如你在这里看到的,重要的是细节被嵌套到卡片属性中。

    显然,您已将两者混合使用,您最好选择一个(令牌更好)并坚持使用。清楚吗?

    【讨论】:

    • 您好,是否允许重复卡?因为我两次尝试使用相同的卡片详细信息,因为它两次保存为两张卡片。
    • 在创建新卡之前,我想检查该客户已经存在的卡。可能吗?如果是这样,我如何检查带有令牌的现有卡?请分享您的想法。
    猜你喜欢
    • 2021-01-31
    • 2018-03-04
    • 2022-10-19
    • 2018-07-27
    • 2023-01-18
    • 2014-03-28
    • 2014-11-12
    • 2018-12-11
    • 2015-06-27
    相关资源
    最近更新 更多