Я ознакомился со многими учебными пособиями в Интернете, чтобы узнать, как произвести оплату с помощью кредитной карты.Все, что я до сих пор, это: Моя форма оплаты:
<%= form_for(@payment, :html => {:id => 'payment-form'}) do |f| %>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, :class => 'form-control' %>
</div>
<div class="form-group">
<%= f.label :phone %>
<%= f.text_field :phone, :class => 'form-control' %>
</div>
<div class="form-group">
<%= f.label :address %>
<%= f.text_area :address, :class => 'form-control' %>
</div>
<div class="form-group">
<%= f.label 'Payment Type' %>
<%= f.select :pay_type, Payment.pay_types.keys, {},:class => 'form-control' %>
</div>
<div class="form-group">
<label>Card Number</label>
<input type="text" size="20" autocomplete="off" data-stripe="number" id="number" class="credit-number form-control" placeholder = "**** **** **** ****" value = "4242424242424242" pattern="[\d ]*" />
</div>
<div class="form-group">
<label>Security Code/CVC</label>
<input type="text" size="4" autocomplete="off" data-stripe="cvc" id="cvc" class="credit-scurity form-control" placeholder="***" value = "123" pattern="\d*" />
</div>
<div class="form-group">
<label>Expiration (MM/YYYY)</label>
<input type="text" size="2" data-stripe="exp_month" id="exp-month" class="card-expiry-month form-control" placeholder="MM" pattern="\d*" />
<span> / </span>
<input type="text" size="4" data-stripe="exp_year" id="exp-year" class="card-expiry-year form-control" placeholder="YYYY" pattern="\d*" />
</div>
<div class="actions">
<%= f.submit 'Place order', :class => 'btn btn-primary btn-payment' %>
</div>
</div>
<% end %>
И скрипт в этой форме:
jQuery(function ($) {
var show_error, stripeResponseHandler;
$("#payment-form").submit(function (event) {
var $form;
$form = $(this);
$form.find("input[type=submit]").prop("disabled", true);
Stripe.card.createToken($form, stripeResponseHandler);
return false;
});
stripeResponseHandler = function (status, response) {
var $form, token;
$form = $("#payment-form");
if (response.error) {
show_error(response.error.message);
$form.find("input[type=submit]").prop("disabled", false);
} else {
token = response.id;
$form.append($('<input type="hidden" name="stripeToken" />').val(token));
$("[data-stripe=number]").remove();
$("[data-stripe=cvv]").remove();
$("[data-stripe=exp-year]").remove();
$("[data-stripe=exp-month]").remove();
$form.get(0).submit();
}
return false;
};
show_error = function (message) {
$("#flash-messages").html('<div class="alert alert-warning"><a class="close" data-dismiss="alert">×</a><div id="flash_alert">' + message + '</div></div>');
$('.alert').delay(5000).fadeOut(3000);
return false;
};
});
payment.controller:
def create
@payment = Payment.new(payment_params)
Stripe.api_key = "sk_test_Hm0ywtd94a4e27SHOfzVJLpZ"
@cart = current_cart
@amount = @cart.total_price.to_i * 100
token = params[:stripeToken]
debugger
# Create a Customer
customer = Stripe::Customer.create(
:description => params[:email],
:card => token
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount, # amount in cents, again
:currency => 'usd',
:card => token,
:description => params[:email]
)
if @payment.save
@payment.add_line_items_from_cart(current_cart)
Cart.destroy(session[:cart_id])
session[:cart_id] = nil
redirect_to root_path
else
render 'new'
end
end
Сейчася получаю сообщение об ошибке: «Невозможно списать средства с клиента, у которого нет активной карты». Я пытаюсь отладить, и проблема в следующем:
token = params[:stripeToken]
params [: stripeToken] равен нулю, тогда токен тоже равен нулю.Пожалуйста, помогите мне