条带卡验证在开发与生产中表现不同

Jas*_*ett 10 credit-card stripe-payments

我对Stripe有一个奇怪的问题(在Rails上,但Rails部分可能无关紧要).

当我在生产中使用语法上有效但非工作的卡号填写我的注册表单时(例如4242424242424242),当我尝试创建令牌时,我收到此响应:

sjsonp1389885476573({
  "error": {
    "message": "Your card was declined.",
    "type": "card_error",
    "code": "card_declined"
  }
}
, 402)
Run Code Online (Sandbox Code Playgroud)

开发中我使用"始终返回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)
Run Code Online (Sandbox Code Playgroud)

所以似乎Stripe的API的这一部分不是像宣传的那样工作,或者我自己正在犯某种愚蠢的错误或其他什么.

我有点不知所措.有什么想法吗?

Jas*_*ett 7

我无法证明以下内容的准确性,但这是我理解中最好的.如果你知道的话,请随意让我直截了当.

用户创建帐户时会发生两个步骤:

  1. 符号化.这是通过XHR请求发生的.
  2. 帐户创建.这发生在服务器端.

在Stripe测试模式中,我了解通过Luhn检查的所有数字都将成功标记,包括Stripe的特殊测试数字.(正确)故障发生的地方是服务器端帐户创建发生的时间.

在条纹实时模式中,我了解通过Luhn检查的所有数字都将成功标记为除了Stripe的测试数字.Stripe会拒绝这些数字,因为它们是Stripe的测试数字.

因此,我能想到的最佳解决方案是告诉客户端Stripe的测试编号将始终在生产中无声地失败,我们的选择是a)使用它或b)编写代码,专门捕获Stripe测试编号并呈现使用这些数字时的生产错误.