如何解决不带条纹iOS SDK的Apple Pay
我已经使用Stripe iOS SDK已有一段时间了,关于实现的一切都很清楚。由于我们的应用程序将支持iOS 14上的App Clip,因此我们减小了二进制文件的大小,因此决定也删除Stripe iOS SDK。
所以我的问题是,是否可以通过API发送付款请求,而完全不使用Stripe SDK?
p.s .:看来我需要实现/tokens端点来传递卡数据。有没有要提出请求的示例?
解决方法
您可以选中Strip checkout,它使您可以以Web格式显示付款页面,而无需在客户端安装任何Stripe SDK。
,我已经设法解决了这种情况,如果有人感兴趣,这就是解决方案。以下是实现此目的的步骤:
- 准备请求模型
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,则需要将编码设置为URLEncoding.default
。 -
解析响应。我将
JSONDecoder
用于以下模型:
import Foundation
struct StripeTokenResponse: Decodable {
let id: String
}
- 创建付款
StripeTokenResponse.id
是您需要传递到将处理付款的后端的东西。这与使用SDK时的步骤相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。