【问题标题】:Stripe elements: how can I validate a card element is not blank client-side?条纹元素:如何验证卡片元素不是空白客户端?
【发布时间】:2021-01-24 06:18:02
【问题描述】:

Stripe 建议使用change 事件对card 元素进行客户端验证:

cardElement.on('change', function(event) {
  if (event.complete) {
    // enable payment button
  } else if (event.error) {
    // show validation to customer
  }
});

但是,如果用户从不编辑/更改卡片元素,则这种方法无法确定卡片元素是否无效。我总是可以尝试使用confirmCardPayment 提交付款,但这效率低下——这种验证应该可以在客户端进行。

我可以通过将付款表单默认为错误状态来解决此问题,然后在用户第一次更改卡时解决(或不解决)该错误状态。但是,这并不方便,因为它需要我将应用程序代码中的“您的卡号不完整”错误消息国际化,而不是依赖 Stripe。

理想情况下,我可以同步检查卡片元素是否有错误,或者至少同步触发更改事件,但这些似乎都不可能。

【问题讨论】:

  • 还有 'ready' 或 'click' 等事件,stripe 接受它
  • @MohamedGhoneim click 没有帮助,因为如果用户从不点击怎么办? ready 可以工作,但该事件不提供任何错误信息。

标签: javascript validation stripe-payments


【解决方案1】:

Stripe.js 根据元素的状态将多个类应用于每个 Stripe 元素的容器:

  • StripeElement--complete
  • StripeElement--empty
  • StripeElement--focus
  • StripeElement--invalid
  • StripeElement--webkit-autofill(仅限 Chrome 和 Safari)

您可以在Stripe's documentation 中阅读有关这些类的更多信息,包括如何自定义它们。

听起来检查StripeElement--empty 类可能足以满足您的用例。你可以这样做:

const cardElementContainer = document.querySelector('#card-element');

let cardElementEmpty = cardElementContainer.classList.contains('StripeElement--empty');

// Do things based on cardElementEmpty being true or false

【讨论】:

  • 这很有帮助,谢谢!然而,这不是理想的解决方案,因为这个接口没有像change 事件的error 对象那样给我适当的国际化错误消息。但也许没有办法得到这个。
  • 通常你会调用一个使用条纹元素的方法(比如stripe.confirmCardPayment),如果元素是空的,你会得到error,你可以用类似的方式处理change 事件错误。这种方法不适用于您的用例吗?
  • 我相信对于confirmCardPayment,您需要有一个有效的PaymentIntent 才能提交,而我想首先在设置PaymentIntent 之前验证卡。
  • 你有没有解决这个问题?
  • StripeElement--invalid 类会告诉你元素的内容是否无效。这对你有用吗@exSnake?
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 2021-10-20
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
相关资源
最近更新 更多