2016-06-02 2 views
1

Я интегрирую платежи полосы в свое приложение. Я отключил по умолчанию кнопку «Оплатить карточкой» Stripe для одного, настроенного мной. После этого тестовый режим успешно всплывает, и я могу ввести тестовые учетные данные. Однако, когда я отправляю тестовый платеж и он одобрен, он просто остается на одной и той же странице контактов, а не идет на страницу сборов, которую я создал для нее.Uncaught TypeError: Невозможно прочитать свойство «отправить» null для оплаты полосы

Примечание: приложение будет очень просто переходить от оплаты полосы к платной странице create.html.erb, пока я не заменил кнопку оплаты по умолчанию с моей новой настраиваемой кнопкой.

Кроме того, глядя на инструменты разработчика Я не отметить, что он читает, когда я отправить тестовый платеж:

Uncaught TypeError: Cannot read property 'submit' of null 

Я думаю, это имеет в виду мой код ниже, где я представляю chargeForm.

Кто-нибудь сталкивается с этой проблемой раньше или знает, что я могу это исправить? Большое спасибо!

приложение/просмотров/контакты/_details.html.erb

 <%= form_tag charges_path, id: 'chargesForm' do %> 
      <script src="https://checkout.stripe.com/checkout.js"></script> 
      <%= hidden_field_tag 'stripeToken' %> 
      <%= hidden_field_tag 'stripeEmail' %> 
      <button id="btn-buy" type="button" class="btn btn-success btn-lg btn-block"><span class="glyphicon glyphicon-heart"></span> I want this!</button> 

      <script> 
      var handler = StripeCheckout.configure({ 
      key: '<%= Rails.configuration.stripe[:publishable_key] %>', 
      token: function(token, arg) { 
       document.getElementById("stripeToken").value = token.id; 
       document.getElementById("stripeEmail").value = token.email; 
       document.getElementById("chargeForm").submit(); 
      } 
      }); 
      document.getElementById('btn-buy').addEventListener('click', function(e) { 
      handler.open({ 
       name: 'OMG! <%= @pin.manufacturer %>', 
       description: '<%= @pin.description %>', 
       amount: 1000 
      }); 
      e.preventDefault(); 
     }) 
     </script> 
     <% end %> 

приложение/контроллеры/charges_controller.rb

class ChargesController < ApplicationController 

def create 
    # Amount in cents 
    @amount = 500 

    customer = Stripe::Customer.create(
    :email => params[:stripeEmail], 
    :card => params[:stripeToken] 
) 

    charge = Stripe::Charge.create(
    :customer => customer.id, 
    :amount  => @amount, 
    :description => 'Rails Stripe customer', 
    :currency => 'usd' 
) 

    rescue Stripe::CardError => e 
     flash[:error] = e.message 
     redirect_to charges_path 
    end 

end 

приложение/просмотров/стоимость/create.html. erb

You bought some Awesome stuff! 

ap р/конфигурации/routes.rb

Rails.application.routes.draw do 
    resources :pins 
    resources :charges 

    devise_for :users 
    root "pins#index" 
    get "about" => "pages#about" #creates about_path 
    get "contact" => "pages#contact" #creates contact_path 
    get "auction" => "pages#auction" #creates auction_path 
    get "terms" => "pages#terms" #creates terms_path 
    post 'send_mail', to: 'contact#send_mail' 
    get 'contact', to: 'contact#show' 

scope 'pins', controller: :pins do 
    scope '/:id' do 
    post 'bid', to: :bid 
    end 
end 

    scope 'admin', controller: :admin do 
    scope 'pins' do 
     get '/:pin_id', to: :pin 
    end 
    end 
end 

ответ

1

Ваш код Javascript читает

document.getElementById("chargeForm").submit(); 

в то время как ваше имя форма chargesForm

<%= form_tag charges_path, id: 'chargesForm' do %> 
Смежные вопросы