2016-04-22 9 views
3

Ich versuche stripe.js in einen Web-App zu integrieren auf ich arbeite, aber die folgende Fehlermeldung geworfen Ich werde:Stripe.js - Kann nicht lesen Eigenschaft ‚stripeToken‘ undefinierte

Cannot read property 'stripeToken' of undefined 

die client setzt den verborgenen Eingang des Tokens aber aus irgendeinem Grund kann der Server ziehen es diese:

var stripeToken = request.body.stripeToken; 

Alle Iden, warum dies sein könnte?

Client-seitige JS

jQuery(function($) { 
    $('#payment-form').submit(function(event) { 
    var $form = $(this); 

    // Disable the submit button to prevent repeated clicks 
    $form.find('button').prop('disabled', true); 

    Stripe.card.createToken({ 
     number: $('.card-number').val(), 
     cvc: $('.card-cvc').val(), 
     exp_month: $('.card-expiry-month').val(), 
     exp_year: $('.card-expiry-year').val() 
    }, stripeResponseHandler); 

    // Prevent the form from submitting with the default action 
    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(); 
    } 
}; 

jQuery(function($) { 
    $('[data-numeric]').payment('restrictNumeric'); 
    $('.cc-number').payment('formatCardNumber'); 
    $('.cc-exp').payment('formatCardExpiry'); 
    $('.cc-cvc').payment('formatCardCVC'); 
    $.fn.toggleInputError = function(erred) { 
    this.parent('.form-group').toggleClass('has-error', erred); 
    return this; 
    }; 
    $('form').submit(function(e) { 
    e.preventDefault(); 
    var cardType = $.payment.cardType($('.cc-number').val()); 
    $('.cc-number').toggleInputError(!$.payment.validateCardNumber($('.cc-number').val())); 
    $('.cc-exp').toggleInputError(!$.payment.validateCardExpiry($('.cc-exp').payment('cardExpiryVal'))); 
    $('.cc-cvc').toggleInputError(!$.payment.validateCardCVC($('.cc-cvc').val(), cardType)); 
    $('.cc-brand').text(cardType); 
    $('.validation').removeClass('text-danger text-success'); 
    $('.validation').addClass($('.has-error').length ? 'text-danger' : 'text-success'); 
    }); 
}); 

Server-seitige JS

app.post('/', function(req, res) { 
    var stripeToken = request.body.stripeToken; 

    var charge = stripe.charges.create({ 
    amount: 1000, // amount in cents, again 
    currency: "usd", 
    source: stripeToken, 
    description: "Example charge" 
    }, function(err, charge) { 
    if (err && err.type === 'StripeCardError') { 
     // The card has been declined 
    } 
    }); 
}); 

Formular (Jade)

form(novalidate='', autocomplete='on', method='POST' id="payment-form") 
    .form-group 
    label.control-label(for='cc-number') 
     | Card number formatting 
     small.text-muted 
     | [ 
     span.cc-brand 
     | ] 
    input#cc-number.input-lg.form-control.cc-number(type='tel', autocomplete='cc-number', placeholder='•••• •••• •••• ••••', required='') 
    .form-group 
    label.control-label(for='cc-exp') Card expiry formatting 
    input#cc-exp.input-lg.form-control.cc-exp(type='tel', autocomplete='cc-exp', placeholder='••/••', required='') 
    .form-group 
    label.control-label(for='cc-cvc') Card CVC formatting 
    input#cc-cvc.input-lg.form-control.cc-cvc(type='tel', autocomplete='off', placeholder='•••', required='') 
    button.btn.btn-lg.btn-primary(type='submit' class='submit') Submit 
    h2.validation 
+0

Ihre Posted in '/' aber keine Ausgabe? 'console.log' in deinem' app.post'-Post, um zu bewirken, dass etwas getroffen und ausgegeben wird ... Versuche es zu identifizieren, wenn es der Anruf ist, der einen Fehler macht. Außerdem müssen Sie async und warten auf Streifen Antwort vor dem Ausgeben einer Seite. –

+0

Die Klassen in meinem Formular und und die CreateToken-Funktion stimmen nicht überein, weshalb es fehlschlägt. Jetzt werde ich bedient 'Kann die Eigenschaft 'stripeToken' von undefined nicht lesen. Auf zur nächsten Herausforderung! –

+0

Ihre Anfrage ist in der Variablen 'req' nicht' request' –

Antwort

2

unsere Anfrage ist in der Variablen req nicht request

Diese var stripeToken = request.body.stripeToken; sollte var stripeToken = req.body.stripeToken; sein

Verwandte Themen