[英]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.