【问题标题】:Once I select done on the STPAddCardViewController() the app loads and doesn't stop loading一旦我在 STPAddCardViewController() 上选择完成,应用程序就会加载并且不会停止加载
【发布时间】:2020-07-15 03:16:22
【问题描述】:

我使用本教程将支付集成到我的应用中:

https://www.raywenderlich.com/182-accepting-credit-cards-in-your-ios-app-using-stripe#

但是当我在STPAddCardViewController() 上选择完成时,应用程序会加载并且不会停止加载。我在教程中显示的扩展中添加了打印语句,希望它能告诉我代码在哪里停止,但没有显示任何打印语句。如下所示:

extension OrderDetialsViewController: STPAddCardViewControllerDelegate {

    func addCardViewControllerDidCancel(_ addCardViewController: STPAddCardViewController) {
        print("addCard")
        navigationController?.popViewController(animated: true)
    }

    private func addCardViewController(_ addCardViewController: STPAddCardViewController,
                             didCreateToken token: STPToken,
                             completion: @escaping STPErrorBlock) {
        print("addCard Created Token")
        var totalCost = 0
        for i in 0...localData.shoppingCart.itemSizeArray.count-1{
            if localData.shoppingCart.itemSizeArray[i] == "hd"{
                totalCost = totalCost+2000
            }
            else if localData.shoppingCart.itemSizeArray[i] == "d"{
                totalCost = totalCost+4000
            }
            else if localData.shoppingCart.itemSizeArray[i] == "free"{
                totalCost = totalCost + 0
            }
            else if localData.shoppingCart.itemSizeArray[i] == "home" {
                totalCost = totalCost + 500
            }
        }
        StripeClient.shared.completeCharge(with: token, amount: totalCost) { result in
            print("StripeClient")
          switch result {
          case .success:
            completion(nil)
            let alertController = UIAlertController(title: "Congrats on your order",
                                  message: "Your payment was successful! Check email for confirmation!",
                                  preferredStyle: .alert)
            let alertAction = UIAlertAction(title: "OK", style: .default, handler: { _ in
              self.navigationController?.popViewController(animated: true)
            })
            alertController.addAction(alertAction)
            self.present(alertController, animated: true)
            self.createOrderEmailBody()
            self.createCustomerOrderBody()
            self.changeUserRewardsScore()
          case .failure(let error):
            print(error)
            completion(error)
          }
        }
  }
}

【问题讨论】:

  • 您使用的是什么版本的 iOS SDK?如果是 v16.0.0 之后的版本,需要实现didCreatePaymentMethod 函数来获取一个 PaymentMethod 对象,didCreateToken 方法已被弃用。您还必须实现 PaymentIntents,因为 PaymentMethods 只能与 PaymentIntents 一起使用,这是推荐的集成。下面是关于如何在 iOS 应用中开始使用 PaymentMethods 和 PaymentIntents 的教程:youtu.be/s5Ml41bZidw?t=57

标签: ios swift xcode stripe-payments payment


【解决方案1】:

您使用的是什么版本的 iOS SDK?

如果是v16.0.0之后的版本,需要实现didCreatePaymentMethod函数来取回一个PaymentMethod对象,didCreateToken方法已被弃用。

您还必须实现 PaymentIntents,因为 PaymentMethods 只能与 PaymentIntents 一起使用,这是推荐的集成。

这里有一个关于如何在 iOS 应用中开始使用 PaymentMethods 和 PaymentIntents 的教程:https://youtu.be/s5Ml41bZidw?t=57

【讨论】:

  • 您能说明如何更改教程中的扩展以适应这种情况吗?不幸的是,视频方法似乎有点过时了。
  • 你能解释一下吗,你的意思是什么?视频中哪些方法似乎过时了?
猜你喜欢
  • 2017-01-12
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多