2017-01-15 1 views
0

Empfangen dieser Fehler basierend auf meinem Code unten. Ich versuche, eine Gebühr mit Stripe mit Stripe.js zu erstellen.NameError at/undefined lokale Variable oder Methode `params' für main: Objekt (Erstellen von Stripe-Ladung mit Stripe.js)

Hier ist meine web.rb Datei:

require 'json' 
 

 
require 'sinatra' 
 
require 'sinatra/reloader' 
 
require 'stripe' 
 

 
get '/' do 
 
\t erb :index 
 
end 
 

 
Stripe.api_key = "sk_test_EkZm6rgWtt3gndztGnlfm4Yy" 
 
token = params[:stripeToken] 
 

 
post '/your-charge-code' do 
 
\t 
 
\t charge = Stripe::Charge.create(
 
    \t \t :amount => 1000, 
 
    \t \t :currency => "eur", 
 
    \t \t :description => "Example charge", 
 
    \t \t :customer => token, 
 
) 
 
end

Und hier ist die index.erb Datei mit dem Zahlungsformular und clientseitige Javascript

<script type="text/javascript" src="https://js.stripe.com/v2/"></script> 
 
<script type="text/javascript"> 
 
    Stripe.setPublishableKey("pk_test_xnI3R1Zl3CbybIM3J83SNMr2"); 
 
</script> 
 

 

 

 

 
<form action="/your-charge-code" method="POST" id="payment-form"> 
 
    <span class="payment-errors"></span> 
 

 
    <div class="form-row"> 
 
    <label> 
 
     <span>Card Number</span> 
 
     <input type="text" size="20" data-stripe="number"> 
 
    </label> 
 
    </div> 
 

 
    <div class="form-row"> 
 
    <label> 
 
     <span>Expiration (MM/YY)</span> 
 
     <input type="text" size="2" data-stripe="exp_month"> 
 
    </label> 
 
    <span>/</span> 
 
    <input type="text" size="2" data-stripe="exp_year"> 
 
    </div> 
 

 
    <div class="form-row"> 
 
    <label> 
 
     <span>CVC</span> 
 
     <input type="text" size="4" data-stripe="cvc"> 
 
    </label> 
 
    </div> 
 

 
    <div class="form-row"> 
 
    <label> 
 
     <span>Billing Postal Code</span> 
 
     <input type="text" size="6" data-stripe="address_zip"> 
 
    </label> 
 
    </div> 
 

 
    <input type="submit" class="submit" value="Submit Payment"> 
 
</form> 
 

 
<script> 
 
$(function() { 
 
    var $form = $('#payment-form'); 
 
    $form.submit(function(event) { 
 
    // Disable the submit button to prevent repeated clicks: 
 
    $form.find('.submit').prop('disabled', true); 
 

 
    // Request a token from Stripe: 
 
    Stripe.card.createToken($form, stripeResponseHandler); 
 

 
    // Prevent the form from being submitted: 
 
    return false; 
 
    }); 
 
}); 
 

 
function stripeResponseHandler(status, response) { 
 
    // Grab the form: 
 
    var $form = $('#payment-form'); 
 

 
    if (response.error) { // Problem! 
 

 
    // Show the errors on the form: 
 
    $form.find('.payment-errors').text(response.error.message); 
 
    $form.find('.submit').prop('disabled', false); // Re-enable submission 
 

 
    } else { // Token was created! 
 

 
    // Get the token ID: 
 
    var token = response.id; 
 

 
    // Insert the token ID into the form so it gets submitted to the server: 
 
    $form.append($('<input type="hidden" name="stripeToken">').val(token)); 
 

 
    // Submit the form: 
 
    $form.get(0).submit(); 
 
    } 
 
}; 
 
</script>

Hat jemand eine Idee was ich vermisse?

Antwort

0

der „undefined lokale var oder Methode params“, die Sie sehen, ich das Problem hier im Zusammenhang gegeben ist, um Ihre Platzierung von token = params[:stripeToken] in web.rb

Sie wollen werden enthalten, dass post '/your-charge-code' do eher unter der Ladung Route als oben in deinem Skript.

Zum Beispiel

require 'sinatra' 
require 'stripe' 

Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2" 


get '/' do 
    "Hello, world" 
end 

post '/charge' do 
    token = params[:stripeToken] 
    Stripe::Charge.create(
     :amount => 1000, 
     :currency => "eur", 
     :source => token, # obtained with Stripe.js or Checkout 
     :description => "My test charge" 
    ) 
end 
Verwandte Themen