不带条纹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时的步骤相同。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...