2013-06-12 8 views
10

C'è un modo per attivare un evento quando il modale di Stripe Checkout è chiuso?Event o Methods per il Stripe Checkout Modal

C'è un ritardo di circa 0,5-1 secondi tra il momento in cui la modale di Stripe si chiude e viene fornita la risposta. A quel tempo, un utente potrebbe fare clic fuori dalla pagina ecc. Per risolvere il problema, possiamo fare qualcosa come disabilitare tutti i link o mettere un overlay ("cover-all") sulla pagina che viene rimossa solo quando viene eseguita l'elaborazione di Stripe .

Il problema è che non è possibile chiudere l'overlay se la persona decide di chiudere il modale Stripe (invece di provare a elaborare un pagamento). Non puoi scegliere come target il modale (ad es. $ ('. Stripe-app')) a causa della stessa politica di origine.

Qualche idea alternativa?

Il mio codice è di seguito, adattato da https://stripe.com/docs/checkout.

// custom Stripe checkout button with custom overlay to avoid UI confusion during payment processing 
$('.btn-stripe').click(function(){ 

    var token = function(res){ 
    var $input = $('<input type=hidden name=stripeToken />').val(res.id); 
    $('.form-stripe').append($input).submit(); 
    }; 

    StripeCheckout.open({ 
    key:   STRIPE_KEY, 
    address:  false, 
    amount:  STRIPE_AMT, 
    currency: 'usd', 
    name:  'Purchase', 
    description: STRIPE_DESC, 
    panelLabel: 'Checkout', 
    token:  token 
    }); 

    $('.cover-all').show(); 

    return false; 
}); 
+0

Non ci dovrebbe essere un ritardo lì. Chiamiamo il callback del token prima che la modal venga chiusa. È possibile disabilitare il pulsante di invio dopo aver ricevuto questa richiamata. Sei sicuro che il ritardo non è nella tua presentazione del modulo? – brian

+0

Stiamo vedendo lo stesso problema, ma non stiamo vedendo il comportamento notato da Brian sopra - per noi, la funzione token viene chiamata dopo che la modale Stripe viene terminata, il che richiede circa 1 secondo, quindi siamo bloccati senza un buon metodo per disabilitare i pulsanti. Forse abbiamo qualcosa di sbagliato? – bprotas

risposta

3

Per commento da @ Brian, è stato confermato che il ritardo si è verificato dopo il token Stripe viene restituito e prima che il modulo viene inviato. Per risolvere il problema originale, aggiungi l'overlay e/o disabilita gli elementi in base alle esigenze una volta restituito il token.

8

Il modo migliore per gestire questo può essere quello di mostrare uno spinner o qualcosa durante l'elaborazione.

Chiuso è un'opzione fornita da Stripe per l'integrazione personalizzata. Viene chiamato ogni volta che il modulo viene inviato o chiuso facendo clic sul pulsante X. Spero che questo possa essere utile.
eg: handler.open({closed : function(){/* some function here*/}})