Checkout.com

iOS 3D Secure SDK

Checkout.com 的 3D Secure (3DS) 移动 SDK 允许您在移动应用中提供原生的 3DS2 体验,并可自定义视觉样式。

该 SDK 负责处理设备数据收集、与发卡行的通信,并在需要时向客户呈现 3D Secure 验证。

👉  查看包含代码示例的集成指南

📚  阅读参考文档

功能特点

最低要求

安装

我们已尽最大努力支持 iOS 上最常见的发布方法。 我们强烈支持 SPM (Swift Package Manager),但如果出于任何原因它不适合您,我们还支持 Cocoapods

Swift Package Manager

Swift Package Manager 与 Swift 构建系统集成,以自动执行下载、编译和链接依赖项的过程。 自 Xcode 11 以来,它应该可以在最新的 Xcode 项目中开箱即用,并且获得了大量的社区支持,近年来得到了广泛的应用。 这是我们首选的 Frames iOS 发布方法,也是最容易集成、保持更新和构建的方法。

如果您以前从未使用过它,请按照 Apple 的分步指南开始 向您的应用程序添加包依赖项

.package(url: "https://github.com/checkout/checkout-3ds-sdk-ios", from: "3.2.5")

CocoaPods

CocoaPods 是 Apple 项目的传统依赖项管理器。 我们仍然支持它,但我们并不总是能够验证其所有特殊方式。

通过运行以下命令确保 cocoapods 安装在您的机器上

$ pod --version

任何高于 1.10.0 的版本都是一个好兆头。 如果未安装或不支持,请按照 Cocoapods 入门

一旦您的机器上有了有效版本的 Cocoapods,要将 Frames 集成到您的 Xcode 项目中,请更新您的 Podfile

platform :ios, '12.0'
use_frameworks!

target '<Your Target Name>' do
  pod 'Checkout3DS', :git => 'git@github.com:checkout/checkout-3ds-sdk-ios.git', :tag => '3.2.5'
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
      config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'i386  x86_64'
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
    end
  end
end

然后,在终端中运行以下命令

$ pod install

注意:您的 Pod 设置可能存在以下 问题

要更新您现有的 Cocoapod 依赖项,请使用

$ pod update

然后,配置您的应用程序以

集成

Checkout.com 的 3DS 服务器

此集成方法涉及调用我们的 authenticate 方法,该方法将使用 Checkout.com 的 3DS 服务器执行整个身份验证流程。

  1. 使用我们的 uiCustomization 对象,使用您首选的用户界面选项初始化 SDK。
  2. 配置身份验证的参数。
  3. 请求身份验证并处理结果以继续您的支付流程。
  4. authenticate 函数现在返回具有两种情况的 Result 类型

代码片段

// 1. Init with defaults
let checkout3DS = Checkout3DSService()

// 2. Init with explicit arguments
let checkout3DS = Checkout3DSService(
    environment: .production,
    locale: Locale(identifier: "en_GB"),
    uiCustomization: uiCustomization,
    appURL: URL(string: "myapp://my-app-url")!
)

let authenticationParameters = AuthenticationParameters(
    sessionID: sessionID,
    sessionSecret: sessionSecret,
    scheme: scheme)

checkout3DS.authenticate(authenticationParameters: authenticationParameters) { result in
    switch authenticationResult {
    case .success(let authenticationResult):
        // handle authentication result. Checkout Payment Authorisation section.
    case .failure(let error):
        // handle failure scenarios
     }
}

👉  查看包含完整详细信息的集成指南

📚  阅读参考文档

任何 3DS 提供商

独立的 3DS 允许我们的 SDK 与任何身份验证提供商一起使用,无论是 Checkout.com 还是其他提供商。 这是一种更高接触的集成,它可以更精细地分解 3DS 流程。 为了与独立的 3DS 服务集成

  1. 使用我们的 uiCustomization 对象,使用您首选的用户界面选项初始化 SDK。
  2. 创建 transaction 对象
  3. 获取 AReq 的 authenticationRequestParameters
  4. 如果您的 3DS 服务器的身份验证响应要求进行验证,则调用 doChallenge 方法来呈现验证,但是,如果 ACS 未强制进行验证,则会触发无摩擦的 3DS 流程。

端到端 3DS 流程

这是一个有用的图表,突出显示了使用我们的 standalone3DSService 的端到端 3DS 流程。 E2E Standalone SDK Flow

代码片段

1- 通过它可以创建事务对象以获取执行质询所需的 authenticationRequestParametersThreeDS2Service 创建实例

   private var transaction: Transaction?
   private var standalone3DSService: ThreeDS2Service?

2-使用您首选的用户界面选项初始化 SDK

// initialise Standalone 3DS Service with required parameters

do {
   let directoryServerData = ThreeDS2ServiceConfiguration.DirectoryServerData(directoryServerID: <directoryServerID>,
                                                                              directoryServerPublicKey: <ds_public>,
                                                                              directoryServerRootCertificates: [<caPublic>])
   let configParameters = ThreeDS2ServiceConfiguration.ConfigParameters(directoryServerData: directoryServerData,
                                                                        messageVersion: <messageVersion>,
                                                                        scheme: <scheme>)
    let serviceConfiguration = ThreeDS2ServiceConfiguration(configParameters: configParameters)
      
    self.standalone3DSService = try Standalone3DSService.initialize(with: serviceConfiguration)
   }  catch let error {
      // handle failure scenario
   }
  1. 使用创建的 ThreeDS2Service 对象创建 transaction
  self.transaction = self.standalone3DSService?.createTransaction()
  1. 检索 authenticationRequestParameters
 // get Authentication Request parameters
 self.transaction?.getAuthenticationRequestParameters { result in
     switch result {
     case .success(let params):
        // make an Authentication Request to your 3DS Server
     case .failure(let error):
        // handle failure scenario
      }
}
  1. 处理 doChallenge 流程
let params = ChallengeParameters(threeDSServerTransactionID: response.transactionId,
                                 acsTransactionID: response.acs.transactionId,
                                 acsRefNumber: response.acs.referenceNumber,
                                 acsSignedContent: response.acs.signedContent)
transaction?.doChallenge(challengeParameters: params, completion: { [weak self] result in
     switch result {
      case .success(let authenticationResult):
         // handle authentication result. Checkout Payment Authorisation section.
      case .failure(let error):
         // handle failure scenario
       }
      // call close and cleanUp methods after challenge flow is completed. 
      self?.transaction?.close()
      self?.standalone3DSService?.cleanUp()
})
  1. 服务 cleanUp 和事务 close
    transaction?.close()
    standalone3DSService?.cleanUp()

支付授权

在启动身份验证过程并获取 AuthenticationResult 对象后,您可以根据 transStatus 的值继续身份验证流程

transStatus 描述 继续支付授权请求
Y 身份验证验证成功。
A 已执行处理尝试。
I 仅供参考。
N 未验证身份或未验证帐户。
R 身份验证或帐户验证被拒绝。
U 无法执行身份验证或帐户验证。

👉  有关交易状态的更多信息

依赖项

我们的 iOS SDK 依赖于一些外部库

帮助和反馈

如果您在使用 3D Secure SDK 时需要帮助,或者想传递您的反馈,您可以通过电子邮件联系我们的团队:support@checkout.com

如果您发现了错误,我们鼓励您通过 GitHub 提出问题。 如果您的问题尚未列出,请详细说明您正在使用的 SDK 版本和您的开发环境,您希望完成什么以及您观察到的实际结果是什么。

如果您对新功能有想法,我们也希望通过 GitHub 了解它。 请 提出问题,详细说明您的想法以及为什么它对您的项目很重要。

许可协议

此软件已获得许可发布。 有关详细信息,请参阅 LICENSE