2013-06-12 6 views
10

Czy istnieje sposób wywołania zdarzenia, gdy modunek Stripe Checkout jest zamknięty?Zdarzenie lub metody dla Stripe Checkout Modal

Występuje około 0,5-1 sekundy opóźnienia między momentem zamknięcia modemu Stripe i dostarczeniem odpowiedzi. W tym czasie użytkownik może kliknąć z dala od strony itp. Aby rozwiązać ten problem, możemy zrobić coś jak wyłączyć wszystkie linki lub umieścić nakładkę ("cover-all") na stronie, która jest usuwana tylko po zakończeniu przetwarzania Stripe .

Problem polega na tym, że nie można zamknąć tej nakładki, jeśli dana osoba zdecyduje się na zamknięcie modemu Stripe (zamiast próbować przetwarzania płatności). Nie można kierować na modal (np. $ (". Stripe-app")) z powodu tej samej zasady pochodzenia.

Jakieś alternatywne pomysły?

Mój kod jest poniżej, zaadaptowany z 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

Nie powinno być opóźnienia. Nazywamy to wezwaniem tokena, zanim modal zostanie zamknięty. Możesz wyłączyć przycisk przesyłania po otrzymaniu tego oddzwonienia. Czy na pewno opóźnienie nie występuje w przesłaniu formularza? – brian

+0

Widzimy ten sam problem, ale nie widzimy zachowania zanotowanego przez Briana powyżej - dla nas funkcja Token jest wywoływana po zakończeniu modulacji Stripe, która trwa około 1 sekundy, więc utknęliśmy bez dobrej drogi aby wyłączyć przyciski. Być może coś jest źle ustawione? – bprotas

Odpowiedz

3

W komentarzu do @brian potwierdzono, że opóźnienie wystąpiło po zwróceniu znacznika Stripe i przed przesłaniem formularza. Aby rozwiązać pierwotny problem, dodaj nakładkę i/lub wyłącz elementy w razie potrzeby po zwrocie tokena.

// custom Stripe checkout button with disabling of links/buttons until form is submitted 
$('.btn-stripe').click(function(){ 

    var token = function(res){ 
    var $input = $('<input type=hidden name=stripeToken />').val(res.id); 

    // show processing message, disable links and buttons until form is submitted and reloads 
    $('a').bind("click", function() { return false; }); 
    $('button').addClass('disabled'); 
    $('.overlay-container').show(); 

    // submit form 
    $('.form-stripe').append($input).submit(); 
    }; 

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

    return false; 
}); 
8

Najlepszym sposobem radzenia sobie z tym może być pokazanie spinnera lub czegoś podczas przetwarzania.

Zamknięta to opcja udostępniana przez Stripe dla niestandardowej integracji. Jest on wywoływany za każdym razem, gdy formularz jest wysyłany lub zamykany, klikając przycisk X. Mamy nadzieję, że może się to przydać.
eg: handler.open({closed : function(){/* some function here*/}})