[英]Apple Pay without Stripe iOS SDK
我已经使用 Stripe iOS SDK 一段时间了,关于实现的一切都很清楚。 由于我们的应用程序将在 iOS 14 上支持 App Clips,我们正在减少二进制大小,因此决定也删除 Stripe iOS SDK。
所以我的问题是我是否可以通过 API 以某种方式发送付款请求并完全省略 Stripe SDK?
ps:看起来我需要实现传递卡片数据的/tokens端点。 是否有任何请求的示例?
我已经设法解决了这种情况,如果有人感兴趣,这里是解决方案。 以下是实现这一目标的步骤:
import Foundation
import PassKit
struct StripeTokenRequest: Encodable {
let pkToken: String
let card: Card
let pkTokenInstrumentName: String?
let pkTokenPaymentNetwork: String?
let pkTokenTransactionId: String?
init?(payment: PKPayment) {
guard let paymentString = String(data: payment.token.paymentData, encoding: .utf8) else { return nil }
pkToken = paymentString
card = .init(contact: payment.billingContact)
pkTokenInstrumentName = payment.token.paymentMethod.displayName
pkTokenPaymentNetwork = payment.token.paymentMethod.network.map { $0.rawValue }
pkTokenTransactionId = payment.token.transactionIdentifier
}
}
extension StripeTokenRequest {
struct Card: Encodable {
let name: String?
let addressLine1: String?
let addressCity: String?
let addressState: String?
let addressZip: String?
let addressCountry: String?
init(contact: PKContact?) {
name = contact?.name.map { PersonNameComponentsFormatter.localizedString(from: $0, style: .default, options: []) }
addressLine1 = contact?.postalAddress?.street
addressCity = contact?.postalAddress?.city
addressState = contact?.postalAddress?.state
addressZip = contact?.postalAddress?.postalCode
addressCountry = contact?.postalAddress?.isoCountryCode.uppercased()
}
}
}
使用JSONEncoder
并设置keyEncodingStrategy
到.convertToSnakeCase
。
针对需要 url 编码参数的https://api.stripe.com/v1/tokens
端点创建 POST 请求。 如果您使用的是 Alamofire,则需要将 encoding 设置为URLEncoding.default
。
解析响应。 我将JSONDecoder
与以下模型一起使用:
import Foundation
struct StripeTokenResponse: Decodable {
let id: String
}
StripeTokenResponse.id
是您需要传递给将处理付款的后端的东西。 这与您在使用 SDK 时执行的步骤相同。您可以检查Strip checkout ,它允许您以 Web 格式显示付款页面,而无需在客户端使用任何 Stripe SDK。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.