Checkout3DS-Security 3.2.4

Checkout3DS-Security 3.2.4

Checkout 的移动 SDK 团队 维护。



  • Checkout.com 集成

Checkout.com

iOS 3D Secure SDK

Checkout.com 3D Secure (3DS) 移动 SDK 可以让您在您的移动应用程序中提供原生 3DS2 体验,同时可以控制视觉效果。

SDK 负责设备数据收集、与发卡行的通信以及在需要时向客户提供 3D Secure 挑战。

👉  查看带有代码示例的集成指南

📚  阅读参考文档

功能

  • 支持 3D Secure 协议 2.1.0 和 2.2.0。
  • 向用户展示 原生 3DS2 挑战界面,并允许您根据您的应用程序和品牌进行调整
  • 如果 3DS2 不可用,则可 回退到 3DS1,并将相同的身份验证结果返回到您的应用程序,就如同 3DS2 一样。(此选项可以由 Checkout.com 为您的账户设置。)
  • 支持一系列本地语言和可访问性需求,并允许您设置自己的字符串翻译。
  • 符合来自 EMVCo 和 PCI 安全标准委员会的要求,特别是为 3DS SDK 设置的,因此您可以确信它与发卡行兼容,并且您的客户敏感数据保持安全。

最低要求

适用于 iOS 的 3DS SDK 需要 Xcode 13.1 及以上版本以及 Swift 5.6.2 及以上版本,并支持针对 iOS 12.0 及以上版本的应用程序。它还支持 Objective-C。有两种方法可以集成我们的 3DS SDK。

安装

CocoaPods

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

通过运行以下命令确保您的计算机上安装了 Cocoapods:

$ pod --version

版本高于 1.10.0 是一个好迹象。如果没有安装,或不受支持,请按照 Cocoapods 入门指南 进行操作。

一旦您的计算机上安装了有效版本的 Cocoapods,要将在您的 Xcode 项目中集成 Frames,请更新您的 Podfile

platform :ios, '12.0'
use_frameworks!

target '<Your Target Name>' do
  pod 'Checkout3DS', :git => '[email protected]:checkout/checkout-3ds-sdk-ios.git', :tag => '3.1.1'
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'
    end
  end
end

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

$ pod install

注意:您的 Pod 设置可能会遇到以下 问题

要更新您的现有 Cocoapod 依赖项,请使用以下命令:

$ pod update

然后,配置您的应用程序

集成

Checkout.com 的 3DS 服务器

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

  1. 使用我们的 uiCustomization 对象设置您首选项的用户界面选项来初始化 SDK。
  2. 配置身份验证的参数。
  3. 请求身份验证并处理结果以继续您的支付流程。
  4. 身份验证函数现在返回 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-通过创建实例ThreeDS2Service创建一个实例,3DS请求者应用可以通过它创建事务对象来获取执行挑战所需的authenticationRequestParameters

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

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

  • scheme只能设置为小写字符串的visamastercard
// 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流程
  • 如果返回的认证响应表明必须应用挑战流程,则3DS请求者应用调用带有所需输入ChallengeParametersdoChallenge方法。该doChallenge方法启动挑战过程。
  • doChallenge函数现在返回带有两种情况的Result类型
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依赖于一些外部库

  • 为了帮助维护安全性,我们使用JOSESwift
  • 为了帮助提供支持和监控SDK的性能,我们使用我们自己的Checkout Event Logger Kit。

帮助和反馈

如需帮助使用3D Secure SDK或提供反馈,您可以通过[email protected]电子邮件我们的团队。

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

如果您有新功能的想法,我们也非常愿意通过 GitHub 收集您的建议。请提交一个问题,详细说明您的想法以及它对您的项目的重要性。

许可证

本软件在许可证下发布。详细信息请参见LICENSE