簡體   English   中英

使用Stripe,Rails更新現有的客戶卡信息

[英]Updating existing customer's card information with Stripe, Rails

我在Stripe中有現有客戶,我希望他們能夠選擇將付款來源(卡)附加到他們的帳戶中。 我瀏覽了Stripe文檔,所以這是我現在擁有的:

stripe_controller.rb

def update_source
  @user = current_user

  Stripe.api_key = "sk_test_"

  # find customer
  customer = Stripe::Customer.retrieve(@user.customer_id)

  # get token from stripe
  token = params[:stripeToken]

  # create and update source
  customer.sources.create({source: token})
  customer.default_source = token
  customer.save

  if customer.save
    redirect_to @user
  end
end

_stripe.html.erb

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script type="text/javascript">

  // Create a Stripe client.
var stripe = Stripe('pk_test_');

// Handle form submission.
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
  event.preventDefault();

  stripe.createToken(card).then(function(result) {
    if (result.error) {
      // Inform the user if there was an error.
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
    } else {
      // Send the token to your server.
      stripeTokenHandler(result.token);
    }
  });
});

function stripeTokenHandler(token) {
  // Insert the token ID into the form so it gets submitted to the server
  var form = document.getElementById('payment-form');
  var hiddenInput = document.createElement('input');
  hiddenInput.setAttribute('type', 'hidden');
  hiddenInput.setAttribute('name', 'stripeToken');
  hiddenInput.setAttribute('value', token.id);
  form.appendChild(hiddenInput);

  // Submit the form
  form.submit();
}
</script>

edit_source.html.erb

<%= form_for(@user, url: update_source_path(@user), :html => {:id => "payment-form"}) do |f| %>
  <div class="field">
    Card number
    <input class="text-field" type="text" size="20" data-stripe="number"/>
  </div>
  ...
  ...
  ...
<% end %>

我收到錯誤Stripe::InvalidRequestError (Missing required param: source.)我不認為這是在創建source ,甚至沒有從Stripe獲取token 不知道我在哪里錯了。

您可以在update_source操作中嘗試使用卡而不是源

# create and update source
card = customer.sources.create(card: stripe_token)
card.save
customer.default_card = card.id
customer.save

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM