Я искал на SoF и нашел one question, что связано, но ответ не помог мне, и, читая проблему человека, это было не совсем то же самое, что и мое.Полоса с рельсами: Неопределенная карта маркеров карты памяти
Я интегрирую Stripe в свою платформу RoR. Ошибка явно указывает, что не так, но я не знаю, как это исправить.
Ошибка ниже ::
Stripe :: InvalidRequestError пользователей :: RegistrationsController # создать Snipped Capture of Error Screen
ответ Запрос ниже:
Параметры:
{"utf8"=>"✓",
"authenticity_token"=>"wTMt3fOth2wQig2rdoeRuYL9e6hXiWOVQMH8Et+wszUFCUqr8f8+3FxrGYzmEYMukb7Wk8SL0jjDAAnqVP+big==",
"plan"=>"2",
"user"=>{"email"=>"[email protected]",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"stripe_card_token"=>"undefined"}}
Так ясно, что моя stripe_card_token не определяется при отправке формы.
Мой файл application.html.rb был <%= javascript_include_tag "https://js.stripe.com/v2/", type: 'text/javascript' %>
включен в головной метке
Мой user.js файл настройки следующим образом:
/*global Stripe*/
$(document).ready(function(){
Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'));
//watch for a form submission
$("#form-submit-btn").click(function(event){
event.preventDefault(); //stop the button from sending form to server
$('input[type=submit]').prop('disabled', true); //disables the button
var error = false; //error noti.
var ccNum = $('#card_number').val(), //just value store variables
cvcNum = $('#card_code').val(),
expMonth = $('#card_month').val(),
expYear = $('card_year').val();
if (!error){
//Get the stripe token:
Stripe.createToken({
number:ccNum,
cvc: cvcNum,
exp_month: expMonth,
exp_year: expYear,
}, stripeResponseHandler);
}
return false;
});
function stripeResponseHandler(status, response){
var f = $('#new_user');
var token = response.id;
f.append('<input type="hidden" name="user[stripe_card_token]" value="' + token + '" />');
f.get(0).submit(); //submission of form
}
});
Мой файл registrations_controller.rb имеет:
class Users::RegistrationsController < Devise::RegistrationsController
def create
super do |resource|
if params[:plan]
resource.plan_id = params[:plan] #store user based on plan 1 or 2
if resource.plan_id == 2
resource.save_with_payment #for pro
else
resource.save #for basic
end
end
end
end
end
Дополнительный/Новый код, размещенный внутри пользователя.rb
attr_accessor :stripe_card_token
def save_with_payment
if valid?
customer = Stripe::Customer.create(description: email, plan: plan_id, card: stripe_card_token)
self.stripe_customer_token = customer.id
save!
end
end
Сформирована новая миграция со следующим:
class AddStripeCustomerTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :stripe_customer_token, :string
end
end
New/Дополнительный код помещается внутри моего application_controller.rb
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :stripe_card_token, :email, :password, :password_confirmation) }
end
end
и добавил следующую строку в мой routes.rb файл в режиме онлайн с завещанию:
controllers: { registrations: 'users/registrations' }
Я также получить следующее сообщение об ошибке в консоли Ошибка 400 - при отправке формы (неверный запрос https://api.stripe.com/v1/)
Это рельсы 3 или рельсы 4? Вы можете удалить неправильный тег? – Meier
Является ли токен правильно создан в Javascript? Ваш 'stripeResponseHandler()' не обрабатывает ошибки, как описано в документации, поэтому я бы начал там. – koopajah
Мне понравилось 2 опечатки - разобрался - но все равно проблема. Я должен снова настроить его с нуля. не знаю, что пошло не так – TheyDontHaveIT