Stripe - 处理来自同一 IP 的多笔付款

Stripe - process multiple payments from same IP

我们有一个简单的表格,允许我们的客户为我们的服务付款。我们正在使用 "StripeCheckout" JS 库,一切都按预期工作。

我们的一些客户向我们提供了信用卡信息,并希望我们代表他们进行付款。这显然是一个安全问题,但我们的客户信任我们 :) 这是 stripe 上的一个问题,因为它不允许从同一 IP 发生多次付款(这是可以理解的)

想知道 stripe 是否提供了不同的 API 以便能够使用相同的 IP 执行此操作(即从我们的运营中心处理多个客户付款)?

如果您已经有了卡号(或者客户愿意将它们提供给您),那么您可以通过他们的 API 使用 https://stripe.com/docs/api#create_card and then once you have a payment source (which can be the card you created) you can use https://stripe.com/docs/api#create_charge 在 Stripe 中创建一个 Card 对象来创建一个 Charge 对象。

除了可能执行的任何速率限制条带之外,我认为 IP 地址不会真正进入其中 - 但这可能限制在您的 API 密钥上,而不仅仅是源 IP。

正如您所说,拥有卡的详细信息可能存在许多风险 - 即使您的客户确实信任您 - 我鼓励您考虑通过他们的 API 从客户端创建卡对象如果可能,只将卡 ID 和令牌传递给后端。这样一来,您就可以降低原始卡号被存储甚至在系统内部的风险。可能很少有公司能够比 Stripe 做得更好——因此也可以依靠它们来存储和处理卡详细信息来利用它们的安全性。

最好的解决方案是使用 Stripe 幂等请求。我们在处理付款时遇到了类似的问题。多次处理用户付款。

幂等密钥确保每个幂等密钥只能处理一次成功支付,可以进行多次失败尝试。见 here

并在 official doc.

让我们考虑一个示例,您想要处理具有唯一性 order_id 的订单的付款。所以很明显你想要一次成功的订单付款。因此您可以在创建费用时传递幂等密钥。您不需要保存用户的卡详细信息,使用 stripe.js 创建的一次性令牌将有效

require "stripe"
Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"

Stripe::Charge.create({
  :amount => 2000,
  :currency => "usd",
  :source => "tok_visa", # obtained with Stripe.js
  :description => "Charge for joseph.davis@example.com"
}, {
  :idempotency_key => "FVnElesDto9UXlOr"
})

idempotency_key should be unique per charge object.