Swift 客户没有id为的链接源

Swift 客户没有id为的链接源,swift,stripe-payments,Swift,Stripe Payments,查看条带测试传输时,我不断遇到以下错误: { "error": { "type": "invalid_request_error", "message": "Customer cus_9tW8Cf0Xvm9lRv does not have a linked source with ID tok_19Zj5rAANnhOmz4ex3ri2jtW.", "param": "source", "code": "missing" } } 我调用api的swif

查看条带测试传输时,我不断遇到以下错误:

{
  "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)
        }
    }
我使用的是在


在我的应用程序上,我得到一个弹出窗口,上面写着请求失败:需要付款(402)。我尝试了很多不同的事情,但似乎都没有得到成功的回应。我看不出我做错了什么,需要一双新的眼睛。任何帮助都会很好。谢谢

使用或创建卡令牌后,将其发送到服务器,在服务器上通过创建客户。该卡将与该客户一起“保存”,您可以在将来对其收费。如果您想向同一客户添加另一张卡,您可以使用创建卡传递新令牌并添加该卡

创建信用卡时,在
customer
参数中传递客户id(cus_XXX)以向默认卡收费。如果要对特定卡收费,您需要将
source
参数中的卡id(card_YYY)与客户一起传递


目前,您正在尝试传递不受支持的客户id和卡令牌。您需要先将该卡保存在客户身上,然后将新卡id传递到上面提到的
source
参数中。

这似乎是一个糟糕的设计。坦率地说,并不是所有的客户都希望他们的信用卡信息保存在一个鲜为人知的支付平台上与客户链接的一次性代币应该收费,这似乎是合理的。@Adambean我不同意这一点。您始终可以对一次性代币收费,然后在事后将费用附加到客户:如果允许,为什么不在创建时将费用与客户关联?这将把事务要求计数从2减少到1我想不出一个好的理由在指控发生后允许这样做,但不是在诉讼期间。