Stripe的卡片验证在开发和生产环境下表现不同。

12
我在Stripe上遇到了一个奇怪的问题(在Rails上,但Rails部分可能不相关)。
当我在生产环境中填写一个语法上有效但不起作用的卡号(例如4242424242424242)时,在尝试创建令牌时我会得到以下响应:
sjsonp1389885476573({
  "error": {
    "message": "Your card was declined.",
    "type": "card_error",
    "code": "card_declined"
  }
}
, 402)

当我在开发中时,我使用“总是返回card_declined”的卡号(4000000000000002),Stripe认为它完全有效:
sjsonp1389885473743({
  "id": "tok_3JvncLYlEZ5NMF",
  "livemode": false,
  "created": 1389885584,
  "used": false,
  "object": "token",
  "type": "card",
  "card": {
    "id": "card_3Jvnr4MtIxzzd5",
    "object": "card",
    "last4": "0002",
    "type": "Visa",
    "exp_month": 2,
    "exp_year": 2020,
    "fingerprint": "dWQBpXrSXnyqoOxe",
    "customer": null,
    "country": "US",
    "name": null,
    "address_line1": null,
    "address_line2": null,
    "address_city": null,
    "address_state": null,
    "address_zip": null,
    "address_country": null,
    "address_line1_check": null,
    "address_zip_check": null,
    "cvc_check": null
  }
}
, 200)

看起来,Stripe的API这部分要么没有像宣传的那样工作as advertised,要么是我自己犯了某种愚蠢的错误或者其他问题。

我有点束手无策。你有什么想法吗?


你在认证时使用测试公钥/私钥还是使用真实的详细信息?(不仅仅是设置测试标志) - Khior
我在开发环境中使用测试密钥,在生产环境中使用正式密钥。 - Jason Swett
好的,健全性检查完成!你还进行了哪些测试?其他Luhn无效的信用卡号码也返回正数吗?你尝试过Stripe提供的其他错误卡号码吗? - Khior
Luhn无效数字会失败,但似乎没有拒绝付款的数字按预期工作(即它们被接受而没有错误)。 - Jason Swett
1
你上面发布的代码只涉及到创建一个卡片令牌。你尝试过使用该令牌进行交易吗? - Khior
显示剩余3条评论
1个回答

8

我无法保证以下内容的准确性,但这是我理解的最好方式。如果您知道更好的方法,请随时指正。

用户创建帐户需要两个步骤:

  1. 令牌化。这是通过XHR请求完成的。
  2. 帐户创建。这在服务器端完成。

在Stripe测试模式下,我了解到通过Luhn检查的所有数字都将成功令牌化,包括Stripe的特殊测试数字。正确的失败会发生在服务器端帐户创建过程中。

在Stripe实际模式下,我了解到通过Luhn检查的所有数字都将成功令牌化,除了Stripe的测试数字。Stripe会拒绝这些数字,因为它们是Stripe的测试数字。

因此,我认为最好的解决方案是告诉客户端,在生产中Stripe的测试数字始终会悄悄地失败,我们的选择是a)接受这一点或b)编写代码,专门捕捉Stripe测试数字,并在使用这些数字时在生产中显示错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接