条纹卡验证在开发与生产中的行为不同
Posted
技术标签:
【中文标题】条纹卡验证在开发与生产中的行为不同【英文标题】:Stripe card validation behaves differently in development vs. production 【发布时间】:2014-02-05 14:26:56 【问题描述】:我在使用 Stripe 时遇到了一个奇怪的问题(在 Rails 上,但 Rails 部分可能无关紧要)。
当我在生产中使用语法有效但无效的卡号(例如 4242424242424242)填写我的注册表单时,我在尝试创建令牌时收到以下响应: p>
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,要么我自己犯了某种愚蠢的错误之类的。
我有点不知所措。有什么想法吗?
【问题讨论】:
您是在进行身份验证时使用测试公钥/私钥,还是使用您的实时详细信息? (不只是设置测试标志) 我在开发中使用测试密钥,在生产中使用实时密钥。 好的;健全性检查完成!你还做了哪些其他测试?其他 Luhn 无效卡号是否也返回正数?您是否尝试过 Stripe 提供的其他错误卡号? Luhn 无效号码失败,但似乎没有一个被拒绝收费号码按预期工作(即它们被接受而没有错误)。 您在上面发布的代码仅涉及创建卡令牌。您是否尝试过使用该令牌执行交易? 【参考方案1】:我无法证明以下内容的准确性,但这是我的最佳理解。如果您知道得更多,请随时纠正我。
用户创建帐户时会发生两个步骤:
-
标记化。这通过 XHR 请求发生。
帐户创建。这发生在服务器端。
在 Stripe 测试模式下,我了解所有通过 Luhn 检查的数字都将成功标记化,包括 Stripe 的特殊测试数字。 (正确)失败发生在服务器端帐户创建时。
在 Stripe 实时模式下,我了解所有通过 Luhn 检查的号码都将成功标记化,但 Stripe 的测试号码除外。 Stripe 会拒绝这些号码,因为它们是 Stripe 的测试号码。
所以我能想到的最佳解决方案是告诉客户 Stripe 的测试编号在生产中总是会默默地失败,我们的选择是 a) 忍受它或 b) 编写代码将专门捕获 Stripe 测试编号,并在使用这些编号时在生产中显示错误。
【讨论】:
以上是关于条纹卡验证在开发与生产中的行为不同的主要内容,如果未能解决你的问题,请参考以下文章