Friday, May 10, 2024
37
rated 0 times [  39] [ 2]  / answers: 1 / hits: 43038  / 8 Years ago, thu, june 2, 2016, 12:00:00

I am integrating stripe payments into my app. I switched out the Stripe default Pay with Card button for one I customized. After doing this, the test mode successfully pops-up and I can enter the test credentials. However, when I submit the test payment, and it is approved, it just stays on the same pin page rather than going to the charges page that I created for it.



Note: the app would transition just fine from stripe payment to the charges create.html.erb page up until I replaced the default stripe payment button with my new customized button.



Also, looking at developer tools I do note that it reads when I submit test payment:



Uncaught TypeError: Cannot read property 'submit' of null 


I think this is referring to my code below where I submit the chargeForm.



Anyone encounter this issue before or know I can fix this? Many thanks!



app/views/pins/_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 %>


app/controllers/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


app/views/charges/create.html.erb



You bought some Awesome stuff!


app/config/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

More From » ruby-on-rails

 Answers
28

Your Javascript code reads



document.getElementById(chargeForm).submit();


while your form name is chargesForm



<%= form_tag charges_path, id: 'chargesForm' do %>

[#61922] Tuesday, May 31, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
miles

Total Points: 256
Total Questions: 111
Total Answers: 104

Location: Benin
Member since Fri, Mar 24, 2023
1 Year ago
;