我正在开发一个iOS应用程序,它包括在应用程序之外销售商品,所以我使用Cocoapods下载了条纹,并将其放在我的贵宾犬中。我知道我已经正确地安装在我的应用程序中并输入了我的测试应用程序接口密钥,因为它import
Stripe
line工作得很好。然而,我在创建令牌时遇到了问题。每次我尝试在模拟器中运行我的代码并尝试进行购买时,都会打印出一个错误。我不知道是不是因为我在某个地方实现了错误的代码行,或者遗漏了一些代码,所以我想知道是否有人可以帮我找出购买失败的原因?我知道我没有后端设置,但我并没有试图发送令牌到服务器,但我只是试图确保我的应用程序连接到条纹,这是需要实际进行购买的6个步骤中的第一步。提前感谢您的帮助。
在允许用户(通过firebase身份验证)进行购买和存储数据的代码之前,为视图控制器编写代码:
import UIKit
class PaymentInfoController: UIViewController {
@IBOutlet weak var paymentLabel: UILabel!
@IBOutlet weak var cardField: UITextField!
@IBOutlet weak var cvcField: UITextField!
@IBOutlet weak var expField: UITextField!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let checkoutVC = segue.destination as? CheckoutController {
checkoutVC.cardNumber = self.cardField.text!
checkoutVC.cvc = self.cvcField.text!
if self.expField.text?.isEmpty == false {
expField.text?.contains("0123456789/")
(expField.text?.characters.count)! <= 7
let expDate = self.expField.text?.components(separatedBy: "/")
let expMonth = UInt((expDate?[0])!)
let expYear = UInt((expDate?[1])!)
checkoutVC.expMon = expMonth!
checkoutVC.expYear = expYear!
}
}
}
@IBAction func checkout(_ sender: Any) {
performSegue(withIdentifier: "checkout", sender: self)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
购买视图控制器的代码:
import UIKit
import FirebaseAuth
import FirebaseDatabase
import Firebase
import Stripe
class CheckoutController: UIViewController {
let ref = Database.database().reference()
@IBOutlet weak var feeLabel: UILabel!
@IBOutlet weak var amountLabel: UILabel!
var cardNumber = String()
var cvc = String()
var expMon = UInt()
var expYear = UInt()
@IBAction func purchase(_ sender: Any) {
if Auth.auth().currentUser != nil {
// Initiate the card
let stripCard = STPCard()
STPAPIClient.shared().createToken(withCard: stripCard, completion: { (token, error) -> Void in
if error != nil {
print("There is an error")
}
else {
// Send the card info to Strip to get the token
stripCard.number = self.cardNumber
stripCard.cvc = self.cvc
stripCard.expMonth = UInt(self.expMon)
stripCard.expYear = UInt(self.expYear)
let alert = UIAlertController(title: "Your Stripe token is " + (token?.tokenId)!, message: "", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(defaultAction)
self.present(alert, animated: true, completion: nil)
print(token!)
}
})
}
}
override func viewDidLoad() {
super.viewDidLoad()
let user = Auth.auth().currentUser
let userID: String = (user?.uid)!
if user != nil {
let totalRef = ref.child("users/\(userID)").child("Total")
totalRef.observeSingleEvent(of: .value, with: { (snapshot) in
let cost = snapshot.value as! Int
self.totalLabel.text = "\(cost) bookies"
let total = (Double(cost) * 1.35) + 1.39
self.amountLabel.text = "$\(total)"
})
}
}
发布于 2017-08-29 04:03:08
问题是你提交的是一个空白的STPCard。您正在调用createToken方法,而没有设置卡片上的任何字段。由于某些原因,看起来您只是在获得令牌之后才在完成块中设置卡片字段。您需要移动以下行:
stripCard.number = self.cardNumber
stripCard.cvc = self.cvc
stripCard.expMonth = UInt(self.expMon)
stripCard.expYear = UInt(self.expYear)
在你给createToken打电话之前。
https://stackoverflow.com/questions/45926409
复制相似问题