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!
Ich bin mir nicht sicher, welche Reparatur Sie gemacht haben. Erzähl es mir bitte. – Neela
Sie haben ein separates schnelles Beispiel in einem Zweig ihres GitHub-Projekts, das nicht dieselbe Version wie ihre Kakaofrucht-Version ist. –