为啥 Stripe.com 返回错误 (402) 需要付款?

Posted

技术标签:

【中文标题】为啥 Stripe.com 返回错误 (402) 需要付款?【英文标题】:Why does Stripe.com return error (402) Payment Required?为什么 Stripe.com 返回错误 (402) 需要付款? 【发布时间】:2013-10-14 21:10:37 【问题描述】:

我没有在任何地方看到 Stripes API 中描述的这个特定错误。有谁知道怎么回事?

这是我创建客户的 VB.net 代码:

Function CreateStripeCustomer(ByVal Token As String) As String
    ''  The Stripe Account API Token - change this for testing 
    Dim STR_Stripe_API_Token As String = "sk_test_SECRET_TEST_KEY" '<-- test secret key. Change to live later.
    ''The Stripe API URL
    Dim STR_Stripe_API_URL As String = "https://api.stripe.com/v1/customers"
    ''Creates a Web Client
    Dim OBJ_Webclient As New System.Net.WebClient()
    ''Creates Credentials
    Dim OBJ_Credentials As New System.Net.NetworkCredential(STR_Stripe_API_Token, "MY_STRIPE.COM_PASSWORD")
    ''Sets the Credentials on the Web Client
    OBJ_Webclient.Credentials = OBJ_Credentials
    ''Creates a Transaction with Data that Will be Sent to Stripe
    Dim OBJ_Transaction As New System.Collections.Specialized.NameValueCollection()
    OBJ_Transaction.Add("email", "PERFECTLY_VALID_EMAIL")
    OBJ_Transaction.Add("card", "PERFECTLY VALID TOKEN RETURNED BY STRIPE.JS")
    ''The Stripe Response String
    Dim STR_Response As String = Encoding.ASCII.GetString(OBJ_Webclient.UploadValues(STR_Stripe_API_URL, OBJ_Transaction))
    Return STR_Response
End Function

在线发生402“payment required”错误:

Dim STR_Response As String = Encoding.ASCII.GetString(OBJ_Webclient.UploadValues(STR_Stripe_API_URL, OBJ_Transaction))

【问题讨论】:

【参考方案1】:

如果您在现场看到这种情况,也有可能卡号完全不正确,例如:如果您检查 402 响应的正文:

【讨论】:

【参考方案2】:

好吧,我切换到我的“LIVE”键而不是“TEST”键,并且修复了它。只是浪费了我生命中的 3 个小时试图解决这个问题。希望这对其他人有帮助。

【讨论】:

不幸的是,他们在不同的环境中以不同的方式格式化响应......不是能够毫无差异地进行测试吗?哦,好吧【参考方案3】:

更正确的答案是你需要使用合适的测试卡号。见https://stripe.com/docs/testing

【讨论】:

经过更多测试后,此响应将显示一条错误消息(如无效卡号),然后您可以显示。 切换到使用测试卡为我修复了这个错误。您无法使用真实的卡号进行测试。【参考方案4】:

Stripe 提供了一个测试环境,您可以在其中使用测试可发布/秘密密钥,而不是等到生产。然而,看起来不利的一面,实际上非常有用的是,您需要遵守 Stripe 的测试条件并使用他们给定的卡号和输入来测试您的 api 调用的不同方面。

例如,为了接收某些错误,您可以输入这些数字:

card_declined: Use this special card number - 4000000000000002.
incorrect_number: Use a number that fails the Luhn check, e.g. 4242424242424241.
invalid_expiry_month: Use an invalid month e.g. 13.
invalid_expiry_year: Use a year in the past e.g. 1970.
invalid_cvc: Use a two digit number e.g. 99.

有关更多信息,请参阅 Samir 发布的链接。

【讨论】:

【参考方案5】:

对于 ios

如果您关注tutorial from Ray Wunderlich website,则可能出现错误的原因是您运行了测试后端(web.rb 文件),然后添加了 TEST_SECRET_KEY。

到终端点击control+C,确保你已经添加了你的TEST_SECRET_KEY,保存文件并执行ruby web.rb

目前,一切都应该正常。

作为参考,我使用这个卡号进行测试:4242 4242 4242 4242

【讨论】:

以上是关于为啥 Stripe.com 返回错误 (402) 需要付款?的主要内容,如果未能解决你的问题,请参考以下文章

握手后,cometd立即返回“402 :: Unknown Client”错误

Stripe 中的非英文文本可能吗?

为啥只保存在源中而不是卡片中的条带卡?

Stripe 实现出现错误无法读取 null 的属性“addEventListener”

在家庭服务器上处理 Stripe 付款时出现禁止 (403) 错误

Stripe Checkout 示例从 localhost 遇到 CORS 错误