Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func handleAddPaymentOptionButtonTapped() {
- // Setup add card view controller
- let paymentConfiguration = STPPaymentConfiguration()
- paymentConfiguration.requiredBillingAddressFields = .full
- paymentConfiguration.publishableKey = "redacted"
- let theme = STPTheme()
- let addCardViewController = STPAddCardViewController(configuration: paymentConfiguration, theme: theme)
- addCardViewController.delegate = self
- // Present add card view controller
- let navigationController = UINavigationController(rootViewController: addCardViewController)
- present(navigationController, animated: true)
- }
- var cardParams = STPPaymentMethodCardParams()
- let billingDetails = STPPaymentMethodBillingDetails()
- func addCardViewController(_ addCardViewController: STPAddCardViewController, didCreateToken token: STPToken, completion: @escaping STPErrorBlock) {
- cardParams.token = token.tokenId
- dismiss(animated: true)
- }
- var clientSecret: String?
- func createPaymentIntent() {
- let paymentAmount = 1000
- let paymentMethodTypes = ["card"]
- MyAPIClient.sharedClient.createPaymentIntent(amount: paymentAmount) { (clientSecret) in
- self.clientSecret = clientSecret
- }
- }
- func confirmPaymentIntent() {
- if let clientSecret = clientSecret {
- let paymentMethodParams = STPPaymentMethodParams(card: cardParams, billingDetails: nil, metadata: nil)
- let paymentIntentParams = STPPaymentIntentParams(clientSecret: clientSecret)
- paymentIntentParams.paymentMethodParams = paymentMethodParams
- let amount = 1000
- MyAPIClient.sharedClient.createAndConfirmPaymentIntent(paymentIntentParams, paymentMethodParams: paymentMethodParams, amount: amount) { (paymentIntent, err) in
- print(err)
- }
- }
- }
- ///////////////// MyApiClient
- func createPaymentIntent(amount: Int, completion: @escaping (_ clientSecret: String) -> ()) {
- let url = "https://us-central1-foodfactory-813ab.cloudfunctions.net/createStripePaymentIntent"
- let params: [String: Any] = [
- "amount": amount,
- "currency": "USD",
- "payment_method_types": ["card"]
- ]
- Alamofire.request(url, method: .post, parameters: params)
- .validate(statusCode: 200..<300)
- .responseJSON { responseJSON in
- if let json = responseJSON.result.value as? [String: Any] {
- if let clientSecret = json["client_secret"] as? String {
- completion(clientSecret)
- }
- }
- }
- }
- func createAndConfirmPaymentIntent(_ paymentIntentParams: STPPaymentIntentParams,
- paymentMethodParams: STPPaymentMethodParams,
- amount: Int,
- completion: @escaping STPPaymentIntentCompletionBlock) {
- let url = "https://us-central1-foodfactory-813ab.cloudfunctions.net/confirm_payment"
- guard let piCheck: String = paymentIntentParams.stripeId else {return}
- var params: [String: Any] = [
- "payment_intent_id": paymentIntentParams,
- "amount": amount,
- "currency": "gbp",
- "confirm": true,
- ]
- // params["shipping"] = STPAddress.shippingInfoForCharge(with: shippingAddress, shippingMethod: shippingMethod)
- Alamofire.request(url, method: .post, parameters: params)
- .validate(statusCode: 200..<300)
- .responseJSON(completionHandler: { (response) in
- switch response.result {
- case .success(let json):
- completion(STPPaymentIntent.decodedObject(fromAPIResponse: json as? [AnyHashable: Any]), nil)
- case .failure(let error):
- completion(nil, error)
- }
- })
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement