以下是一个示例代码片段,其中使用Alamofire和Stripe库,并解决了“Completion handler not being called”的问题:
import Alamofire
import Stripe
// 定义API请求的completion handler
typealias APICompletionHandler = (Result) -> Void
// 使用Alamofire发送API请求
func sendAPIRequest(url: URLConvertible, completionHandler: @escaping APICompletionHandler) {
AF.request(url).responseJSON { response in
// 检查请求是否成功
guard response.error == nil else {
completionHandler(.failure(response.error!))
return
}
// 解析JSON响应数据
guard let data = response.data else {
completionHandler(.failure(NSError(domain: "Invalid response data", code: -1, userInfo: nil)))
return
}
do {
let decodedData = try JSONDecoder().decode(T.self, from: data)
completionHandler(.success(decodedData))
} catch {
completionHandler(.failure(error))
}
}
}
// 使用Stripe库进行支付
func processPayment(withToken token: STPToken, completionHandler: @escaping APICompletionHandler) {
let url = "https://example.com/process_payment"
// 构建请求参数
let parameters: [String: Any] = [
"token": token.tokenId,
// 其他支付相关参数
]
// 发送API请求
sendAPIRequest(url: url, completionHandler: completionHandler)
}
// 调用支付方法
let token = STPToken() // 假设已经获得了Stripe的token
processPayment(withToken: token) { result in
switch result {
case .success(let message):
print("Payment processed successfully: \(message)")
case .failure(let error):
print("Payment failed with error: \(error)")
}
}
在上述代码中,sendAPIRequest
函数使用了Alamofire发送API请求,并在请求完成后调用completion handler。processPayment
函数使用Stripe库进行支付,并在支付完成后调用completion handler。