Как только я выбираю «Готово» в STPAddCardViewController (), приложение загружается и не прекращает загрузку. - PullRequest
1 голос
/ 03 апреля 2020

Я использовал этот учебник для интеграции оплаты в мое приложение:

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

Но когда я выбираю «Готово» на STPAddCardViewController(), приложение загружается и не не прекращать загрузку. Я добавил операторы print в расширение, показанное в руководстве, в надежде, что оно покажет мне, где код останавливается, но ни один из операторов print не был показан. Это показано ниже:

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)
          }
        }
  }
}

1 Ответ

1 голос
/ 03 апреля 2020

Какую версию iOS SDK вы используете?

Если это версия после v16.0.0, вам нужно реализовать функцию didCreatePaymentMethod для возврата объекта PaymentMethod, метод didCreateToken устарел.

Вы также должны иметь для реализации PaymentIntents, так как PaymentMethods можно использовать только с PaymentIntents, которые являются рекомендуемой интеграцией.

Вот учебник о том, как начать использовать PaymentMethods и PaymentIntents в вашем приложении iOS: https://youtu.be/s5Ml41bZidw?t=57

...