使用 Stripe.js 用于 kickstarter 风格的应用程序。在遍历并为所有卡充电之前如何测试卡?

Using Stripe.js for kickstarter-style application. How can I test cards before iterating over and charging them all?

所以我正在构建一个与 kickstarter/gofundme 等行为类似的应用程序,因为一旦达到价格目标,它就会向所有贡献的客户收费。我的过程是,当客户为价格目标做出贡献时,我创建一个条纹客户并存储他们的 ID:

    customer = stripe.Customer.create(
      email = <user_email>,
      source = <stripe_customer_token>
    )

我将此信息存储在数据库中的一个数组中。一旦达到价格目标,我就会遍历数组,使用经条带验证为合法的初始卡向每个客户收费。

    for customer in customer_array:
      charge = stripe.Charge.create(
        amount = <amount>,
        customer = <customer>,
      )

我预见的问题是,有时这些价格目标会持续数周。在第 1 天,客户可以贡献并通过 stripe 验证为合法卡,但在 3 周后该卡可能会过期或被取消等。有没有办法 运行 在之前对客户令牌进行某种验证充电以确保它仍然合法?我不想在数组中迭代超过 9/10 的客户并向他们收取合法费用,然后用无效的卡击中数组中的最终客户。我正在使用 stripe.js,所以希望有一个不包含条纹 api 的解决方案。谢谢

\Stripe\Charge::create(array(
  "amount" => 2000,
  "currency" => "usd",
  "capture" => false,
  "source" => "tok_mastercard", 
  "description" => "Charge for avery.moore@example.com"
));

先用capture false充值,然后用上面返回的id进行capture。 使用此方法,您可以更有信心地验证卡片。在极端情况下,例如信用卡被注销或被盗,银行可以否决所有预留资金指令。

$ch = \Stripe\Charge::retrieve("ch_1C9s1N2eZvKYlo2Cmpk4KBgS");
$ch->capture();