微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不带条纹iOS SDK的Apple Pay

如何解决不带条纹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。

,

我已经设法解决了这种情况,如果有人感兴趣,这就是解决方案。以下是实现此目的的步骤:

  1. 准备请求模型
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()
    }
  }
}
  1. 使用JSONEncoder并将keyEncodingStrategy设置为.convertToSnakeCase

  2. 在需要对参数进行URL编码的https://api.stripe.com/v1/tokens端点上创建POST请求。如果您使用的是Alamofire,则需要将编码设置为URLEncoding.default

  3. 解析响应。我将JSONDecoder用于以下模型:

import Foundation

struct StripeTokenResponse: Decodable {
  let id: String
}
  1. 创建付款 StripeTokenResponse.id是您需要传递到将处理付款的后端的东西。这与使用SDK时的步骤相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。