swift - 客户没有带 ID 的链接源

标签 swift stripe-payments

我在查看 strip 测试交易时不断收到以下错误:

{
  "error": {
    "type": "invalid_request_error",
    "message": "Customer cus_9tW8Cf0Xvm9lRv does not have a linked source with ID tok_19Zj5rAANnhOmz4ex3ri2jtW.",
    "param": "source",
    "code": "missing"
  }
}

我调用api的swift代码如下:

    @IBAction func payButtonWasPressed() {
        stripeCard = STPCardParams()

        let expirationDate = self.cardExpiryTextField.text!.components(separatedBy: "/")
        let expMonth = UInt(expirationDate[0])
        let expYear = UInt(expirationDate[1])

        stripeCard.number = self.cardNumberTextField.text
        stripeCard.cvc = self.cardCVVTextField.text
        stripeCard.expMonth = expMonth!
        stripeCard.expYear = expYear!

        STPAPIClient.shared().createToken(withCard: stripeCard, completion: { (token, error) -> Void in

            if error != nil {
                self.handleError(error! as NSError)
                return
            } 

            self.chargeUsingToken(token!)
        })
    }

    func handleError(_ error: NSError) {
        UIAlertView(title: "Please Try Again",
                    message: error.localizedDescription,
                    delegate: nil,
                    cancelButtonTitle: "OK").show()

    }

    func chargeUsingToken(_ token: STPToken) {

        let URL = "https://splitterstripeserver.herokuapp.com/charge"
        let params = ["source": token.tokenId,
                      "stripe_token": token.tokenId,
                      "amount": total] as [String : Any]

        let manager = AFHTTPSessionManager()
        manager.post(URL, parameters: params, success: { (operation, responseObject) -> Void in

            if let response = responseObject as? [String: String] {
                UIAlertView(title: response["status"],
                    message: response["message"],
                    delegate: nil,
                    cancelButtonTitle: "OK").show()
            }

        }) { (operation, error) -> Void in
            self.handleError(error as NSError)
        }
    }

我正在使用在 stripe github 上找到的示例后端

在我的应用程序上,我收到一个弹出窗口,提示请求失败:需要付款 (402)。我尝试了很多不同的东西,但似乎无法获得成功的回应。我看不出我做错了什么,需要一双新的眼睛。任何帮助都会很棒。谢谢

最佳答案

使用 Stripe Checkout 创建卡片 token 后或 Stripe.js ,您将它发送到您的服务器,您可以在服务器上使用它通过 API 创建客户.该卡与该客户一起“保存”,然后您可以在将来对其收费。如果您想为同一客户添加另一张卡,您可以使用创建卡 API传递新 token 并添加该卡。

当您创建 charge ,你在customer参数中传递客户id(cus_XXX)来对默认卡进行扣费。如果您想对特定的卡收费,您可以在 source 参数中将卡 ID (card_YYY) 与客户一起传递。

目前,您正在尝试传递不受支持的客户 ID 和卡 token 。您需要先将该卡保存在客户身上,然后如上所述在 source 参数中传递新卡 ID。

关于swift - 客户没有带 ID 的链接源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41534764/

相关文章:

ruby-on-rails - Stripe webhooks : Is there a way to fire the event : customer. source.expiring in test mode?

swift - Swift 中的 Realm 迁移

swift - 从一个 Controller 导航到另一个 Controller ,它们之间有一个根 Controller

swift - 解析云代码查询未触发成功或错误

swift - 本地化不同语言的数字整数

javascript - 使用 Parse.com Stripe API 创建费用时出错

ios - 从自定义类调用 View Controller 方法

javascript - 如果没有重复脚本,自定义 Stripe 结帐按钮将无法正常工作

ios - 如何在iOS项目中正确实现Stripe?

php - 如何在 Stripe API 上创建新源并设置为默认源