2017-06-16 19 views
1

Ich versuche Stripe in eine App zu integrieren mit dem Modell, das sie im Swift iOS (Simple) Beispiel auf ihrem GitHub zur Verfügung gestellt haben (Available At: https://github.com/stripe/stripe-ios) .Swift App mit Stripe - Typ 'STPCustomer' hat kein Mitglied 'decodedObject'

Ich habe Stripe und Alamofire zu einem neuen Projekt hinzugefügt, das ich über Cocoapods erstelle, und alles funktioniert einwandfrei, eine Funktion in der MyAPIClient.swift-Datei ausgeschlossen. Diese Funktion ist:

@objc func retrieveCustomer(_ completion: @escaping STPCustomerCompletionBlock) { 
    let url = self.baseURL.appendingPathComponent("customer") 
    Alamofire.request(url) 
     .validate(statusCode: 200..<300) 
     .responseJSON { response in 
      switch response.result { 
      case .success(let result): 
       if let customer = STPCustomer.decodedObject(fromAPIResponse: result as? [String: AnyObject]) { //Error occurs here  
        completion(customer, nil) 
       } else { 
        completion(nil, NSError.customerDecodingError) 
       } 
      case .failure(let error): 
       completion(nil, error) 
      } 
    } 
} 

Auf der Linie mit der Aussage „wenn Kunden lassen“, wird ein Fehler ausgelöst, erklärt, dass Typ ‚STPCustomer‘ hat kein Mitglied ‚decodedObject‘. Ich bin mir nicht sicher, ob ich die Frameworks falsch hinzugefügt oder etwas falsch gemacht habe, da diese Anweisung perfekt in Stripe's schnellen Beispielprojekt funktioniert. Hier ist die Gesamtheit der betreffenden Datei:

import Foundation 
import Stripe 
import Alamofire 

class MyAPIClient: NSObject, STPBackendAPIAdapter { 

    static let sharedClient = MyAPIClient() 
    var baseURLString: String? = nil 
    var baseURL: URL { 
     if let urlString = self.baseURLString, let url = URL(string: urlString) { 
      return url 
     } else { 
      fatalError() 
     } 
    } 

    func completeCharge(_ result: STPPaymentResult, amount: Int, completion: @escaping STPErrorBlock) { 
     let url = self.baseURL.appendingPathComponent("charge") 
     Alamofire.request(url, method: .post, parameters: [ 
      "source": result.source.stripeID, 
      "amount": amount 
      ]) 
      .validate(statusCode: 200..<300) 
      .responseString { response in 
       switch response.result { 
       case .success: 
        completion(nil) 
       case .failure(let error): 
        completion(error) 
       } 
     } 
    } 

    @objc func retrieveCustomer(_ completion: @escaping STPCustomerCompletionBlock) { 
     let url = self.baseURL.appendingPathComponent("customer") 
     Alamofire.request(url) 
      .validate(statusCode: 200..<300) 
      .responseJSON { response in 
       switch response.result { 
       case .success(let result): 
        if let customer = STPCustomer.decodedObject(fromAPIResponse: result as? [String: AnyObject]) { 


         completion(customer, nil) 
        } else { 
         completion(nil, NSError.customerDecodingError) 
        } 
       case .failure(let error): 
        completion(nil, error) 
       } 
     } 
    } 

    @objc func selectDefaultCustomerSource(_ source: STPSourceProtocol, completion: @escaping STPErrorBlock) { 
     let url = self.baseURL.appendingPathComponent("customer/default_source") 
     Alamofire.request(url, method: .post, parameters: [ 
      "source": source.stripeID, 
      ]) 
      .validate(statusCode: 200..<300) 
      .responseString { response in 
       switch response.result { 
       case .success: 
        completion(nil) 
       case .failure(let error): 
        completion(error) 
       } 
     } 
    } 

    @objc func attachSource(toCustomer source: STPSourceProtocol, completion: @escaping STPErrorBlock) { 
     let url = self.baseURL.appendingPathComponent("customer/sources") 
     Alamofire.request(url, method: .post, parameters: [ 
      "source": source.stripeID, 
      ]) 
      .validate(statusCode: 200..<300) 
      .responseString { response in 
       switch response.result { 
       case .success: 
        completion(nil) 
       case .failure(let error): 
        completion(error) 
       } 
     } 
    } 
} 

extension NSError { 
    static var customerDecodingError: NSError { 
     return NSError(domain: StripeDomain, code: 50, userInfo: [ 
      NSLocalizedDescriptionKey: "Failed to decode the Stripe customer. Have you modified the example backend?" 
      ]) 
    } 
} 

Jede Hilfe ist willkommen! Vielen Dank!

Antwort

1

Okay, ich bin ein Idiot. Stripe Pushed Update 10.1.0, hat jedoch den neuen Zweig für das Beispielprojekt 10.1.0 nicht zum Standardzweig gemacht. Alles ist jetzt golden.

+0

Ich bin mir nicht sicher, welche Reparatur Sie gemacht haben. Erzähl es mir bitte. – Neela

+0

Sie haben ein separates schnelles Beispiel in einem Zweig ihres GitHub-Projekts, das nicht dieselbe Version wie ihre Kakaofrucht-Version ist. –

Verwandte Themen