我正试图使用Firebase-Cloud-Functions
将Stripe集成到我的ios(Swift
)应用程序中。现在我想把令牌拿到一张创建的卡上,把它保存到我的Firestore-Database
中。
我已经学习了如何实现它的教程。当我自己显示addCardViewController
时,它就起作用了,因为我有didCreateToken
方法。但现在我只是像他们提供的例子中所示的那样向它展示programmatically
(第158行是他们展示视图控制器的地方),我不知道如何实现这个方法,并获得新的卡if a user creates/add
的令牌。
我通常就是这么做的:
func addCardViewController(_ addCardViewController: STPAddCardViewController, didCreateToken token: STPToken, completion: @escaping STPErrorBlock)
{
STRIPE_CUSTOMERS_REF.document(userId).collection("tokens").addDocument(data: ["token": tokenId]) // Calls Firebase-Cloud-Function and adds payment method to Stripe
navigationController?.popViewController(animated: true)
}
但正如我所说,我无法实现这种方法。
我想在用户添加新卡时获得令牌。
我真的很感激你的帮助。如果你需要任何其他信息,请告诉我。
-Marie
看起来像是使用STPPaymentContext
(标准集成)来呈现STPPaymentMethodsViewController
(上例中的第158行)。
CCD_ 10实际上实现了它自己的CCD_ 11和CCD_。因此,STPPaymentContext
处理这两个视图控制器的委派方法,以及在使用标准集成时未向用户公开的委派方法。这就解释了为什么委托方法没有为您触发。
相反,您的视图控制器应该成为STPPaymentContext
的委托,并实现所有必需的委托方法[0],包括paymentContextDidChange
方法。每当用户添加新卡或选择新的支付方式时,就会触发paymentContextDidChange
方法[1]。
当用户输入新卡的详细信息时,您应该能够通过以下内容获得代币ID:
func paymentContextDidChange(_ paymentContext: STPPaymentContext)
{
if let card = paymentContext.selectedPaymentMethod as? STPCard {
let token = card.stripeID
// store token as required
}
}
希望能有所帮助!
[0]https://stripe.github.io/stripe-ios/docs/Protocols/STPPaymentContextDelegate.html
[1]https://stripe.github.io/stripe-ios/docs/Protocols/STPPaymentMethod.html