Stripe checkout - 如何绑定提交事件?

Posted

技术标签:

【中文标题】Stripe checkout - 如何绑定提交事件?【英文标题】:Stripe checkout - how to bind submit event? 【发布时间】:2014-05-12 02:49:41 【问题描述】:

我在我的网页中使用Stripe checkout JS 库。 将令牌提交到我的服务器后,我需要显示一条阻止的“我正在处理您的请求”消息

我需要它,因为我的服务器端处理可能需要超过 5 秒,并且我不希望用户离开页面(或任何其他可能使结帐过程无效的事情)。

我试图在条纹表单上绑定提交事件以显示模式(例如!),但事实证明 Checkout.js 正在取消绑定任何提交事件并且似乎无法检测到实际提交表单。

这是我的代码:

<form class="stripe-form" action="..." method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="..."
    data-email="..."
    data-label="Pay with Stripe"
    data-panel-label="Pay amount"
    data-amount="... " 
    data-currency="USD"
    data-name="..."
    data-description="..."
    data-image="...">
  </script>
</form>

<script type="text/javascript">
$(function()

    stripeForm = $('.stripe-form');

    stripeForm.submit(function(e)
        console.log('going to submit'); //this is never called!
    );

);
</script>

正如 cmets 所说,提交事件永远不会被触发,我还没有找到任何解决方法来检测它。有什么想法吗?

注意:我不包括更通用的Stripe library,只有 StripeCheckout 可用。

谢谢大家

【问题讨论】:

【参考方案1】:

我也有同样的问题。在我看来,checkout.js 插入了一个 iframe,因此无法绑定到我知道的提交事件。

我唯一想做的就是在您单击“使用 Stripe 付款”按钮时显示加载消息。

$( ".stripe-button-el" ).click(function() 
    $( "#loadingMessage" ).show();
);

但是,如果用户关闭 Stripe 支付模式,您需要隐藏 #loadingMessage。

【讨论】:

【参考方案2】:

如果您使用https://stripe.com/docs/checkout#integration-custom,则可以在提交表单之前使用以下内容创建叠加层。

var form = document.querySelector('form');      
var handler = StripeCheckout.configure(
    key: 'STRIPE_PUBLIC_KEY',
    image: 'https://stripe.com/img/documentation/checkout/marketplace.png',
    locale: 'auto',
    token: function(response) 
    

        var overlay = document.createElement('div');
        overlay.className = 'my-overlay  my-overlay--visible';

        document.body.appendChild(overlay);

        form.submit();  
    
);

【讨论】:

以上是关于Stripe checkout - 如何绑定提交事件?的主要内容,如果未能解决你的问题,请参考以下文章

Stripe - 如何在 Checkout.Session 中获取账单地址信息

如何在 Stripe Checkout 中添加增值税?

使用 Python Flask 自定义 Stripe Checkout

如何使用 Livewire Stripe Prebuilt Checkout 修复 CORS 错误 [重复]

如何在 Stripe Checkout 仅客户端实现中包含元数据?

如何在 Stripe 内循环