2015-11-28 1 views
-1

Я искал на 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/)

+0

Это рельсы 3 или рельсы 4? Вы можете удалить неправильный тег? – Meier

+0

Является ли токен правильно создан в Javascript? Ваш 'stripeResponseHandler()' не обрабатывает ошибки, как описано в документации, поэтому я бы начал там. – koopajah

+0

Мне понравилось 2 опечатки - разобрался - но все равно проблема. Я должен снова настроить его с нуля. не знаю, что пошло не так – TheyDontHaveIT

ответ

-1

Да, я начал отлаживать и подбирать некоторые вещи. Я думаю, что полоса была demo'd для меня не была на 100% прав - так что я начал с нуля, и теперь это работает. Не знаю, что было по-другому, никогда не сравнивалось 2. Теперь это работает - так что я счастлив

Смежные вопросы