【问题标题】:Stripe iOS integration - how do I know if Stripe is actually receiving my test inputs?Stripe iOS 集成 - 我如何知道 Stripe 是否真的在接收我的测试输入?
【发布时间】:2016-03-14 04:14:54
【问题描述】:

所以我一直在尝试将 Stripe 与我的 swift 代码集成,到目前为止,我有以下代码用于测试。我打印了信用卡号,因为它需要在 Stripe 端创建一个令牌,并且它正确反映了 Stripe 使用的测试信用卡号(例如 4242424242424242)(我也为 cvc 和 exp 日期输入了随机数),但是, “validateCardReturningError”总是跳过“createTokenWithCard”函数来执行“print(“Error”)”。在尝试调试时,我还注释掉了“validateCardReturningError”以查看是否获得了令牌,但我得到了 nil 作为令牌的值。

这种行为让我相信与 Stripe 的通信实际上并没有发生,因此没有生成令牌。如果是这样,有没有办法测试通信?或者,有没有办法检查“validateCardReturningError”返回的值是什么?

if (userExpiration.isEmpty){ let expArr = userExpiration.componentsSeparatedByString("/") 
    if (expArr.count > 1) { 
        let expMonth: NSNumber = Int(expArr[0])! 
        let expYear: NSNumber = Int(expArr[1])! 
        creditCard.expMonth = expMonth.unsignedLongValue 
        creditCard.expYear = expYear.unsignedLongValue } }

print(creditCard.number)

do {
    try creditCard.validateCardReturningError()
    STPAPIClient.sharedClient().createTokenWithCard(
        creditCard,
        completion: { (token: STPToken?, stripeError: NSError?) -> Void in
            print(token) 
        })
} catch {        
        print("Error")
}

我打印 stripeError 时遇到的错误是: Optional(Error Domain=com.stripe.lib Code=50 "Missing required param: exp_month." UserInfo={com.stripe.lib:ErrorMessageKey=Missing required param: exp_month., com.stripe.lib:ErrorParameterKey=card[expMonth], NSLocalizedDescription=Missing required param: exp_month.})

【问题讨论】:

  • 你在stripeError得到了什么?
  • 以下是我得到的:可选(错误域=com.stripe.lib 代码=50“缺少必需的参数:exp_month。” UserInfo={com.stripe.lib:ErrorMessageKey=缺少必需的参数: exp_month., com.stripe.lib:ErrorParameterKey=card[expMonth], NSLocalizedDescription=Missing required param: exp_month.})
  • 月份相关代码为: if (userExpiration.isEmpty){ let expArr = userExpiration.componentsSeparatedByString("/") if (expArr.count > 1) { let expMonth: NSNumber = Int( expArr[0])!让 expYear: NSNumber = Int(expArr[1])! creditCard.expMonth = expMonth.unsignedLongValue creditCard.expYear = expYear.unsignedLongValue } }
  • 您应该编辑问题并在其中添加错误和附加代码,这样可读性会更好。
  • 请注意,在您的代码中,仅当到期时间为空 (if (userExpiration.isEmpty)) 时,您才对到期时间做一些事情,而不是当它不是时。因此,当用户实际输入任何数据时,您并没有使用它,也没有发送它。添加! 否定测试。

标签: ios swift stripe-payments


【解决方案1】:

变化:

if (userExpiration.isEmpty)

if (!userExpiration.isEmpty)

这样你就可以在里面有东西的时候使用到期日期。

还要添加一个else 子句来抱怨它是否为空,并阻止提交(我想这个代码在用户提交表单时运行)。

【讨论】:

  • 哦,谢谢你的收获。我现在得到了令牌 ID。终于!
【解决方案2】:

Stripe 实际上可让您在仪表板中浏览您帐户的所有日志。因此,如果您前往 https://dashboard.stripe.com/logs?method=not_get,您将能够看到您是否成功地 POST 到 /v1/tokens 端点。

【讨论】:

  • 有趣,不知道这个。但我在日志中什么也没看到。似乎由于缺少“exp_month”而导致通信中断,但我认为我上面的代码涵盖了它?
  • 啊,我明白你现在在说什么了。我将 Stripe 仪表板设置为“实时”,这就是为什么我在日志中看不到任何内容的原因。现在我将它设置为“测试”,我看到了错误。谢谢。
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2017-01-30
  • 2016-11-18
  • 2015-01-05
相关资源
最近更新 更多