我们有一个简单的表格,允许我们的客户为我们的服务付款。我们正在使用“StripeCheckout”JS 库,一切都按预期工作。
我们的一些客户向我们提供了信用卡信息,并希望我们代表他们付款。这显然是一个安全问题,但我们的客户信任我们 :) 这是条带上的一个问题,因为它不允许从同一个 IP 发生多次付款(这是可以理解的)
想知道 stripe 是否提供不同的 API 来使用相同的 IP 来执行此操作(即处理来自我们运营中心的多个客户付款)?
我们有一个简单的表格,允许我们的客户为我们的服务付款。我们正在使用“StripeCheckout”JS 库,一切都按预期工作。
我们的一些客户向我们提供了信用卡信息,并希望我们代表他们付款。这显然是一个安全问题,但我们的客户信任我们 :) 这是条带上的一个问题,因为它不允许从同一个 IP 发生多次付款(这是可以理解的)
想知道 stripe 是否提供不同的 API 来使用相同的 IP 来执行此操作(即处理来自我们运营中心的多个客户付款)?
使用 Stripe Idempotent 请求的最佳解决方案。我们在处理付款时遇到了类似的问题。用户付款被多次处理。
幂等密钥保证每个幂等密钥只能处理一次成功支付,可以进行多次失败尝试。看这里
并在官方文档中。
让我们考虑一个示例,您希望处理具有唯一 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 每个收费对象应该是唯一的。
如果您已经有卡号(或者客户愿意给您),那么您可以使用https://stripe.com/docs/api#create_card通过他们的 API 在 Stripe 中创建一个 Card 对象,然后在您付款后源(可以是您创建的卡)您可以使用https://stripe.com/docs/api#create_charge创建一个 Charge 对象。
除了可能执行的任何速率限制条带之外,我认为 IP 地址不会真正进入其中 - 但这可能受限于您的 API 密钥,而不仅仅是源 IP。
正如您所提到的,拥有卡详细信息存在许多可能的风险——即使您的客户确实信任您——我鼓励您考虑通过他们的 API 从客户端创建卡对象,并将卡 ID 和令牌传递给如果可能,后端。这样,您就可以降低原始卡号被存储或什至在您的系统中所面临的风险。可能很少有公司能比 Stripe 做得更好——因此不妨依靠它们来存储和处理卡片详细信息,从而利用它们的安全性。