条纹卡验证在开发与生产中的行为不同

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 测试编号,并在使用这些编号时在生产中显示错误。

【讨论】:

以上是关于条纹卡验证在开发与生产中的行为不同的主要内容,如果未能解决你的问题,请参考以下文章

生产红宝石中未显示条纹卡元素

条纹结帐后如何生成收据页面

使用带有条纹 Firebase 扩展的运行付款时,条纹产品元数据未返回到 Firebase 的经过身份验证的用户实例

条纹多张卡片行为

Symfony2 基于两个字段的表单验证

JQuery 验证问题:我在同一页面上有 2 个表单,每个表单在 2 个不同的选项卡中,但只有一个验证不起作用