Checkout3DS 3.2.4

Checkout3DS 3.2.4

Mobile SDK Team @Checkout 维护。



 
依赖关系
CheckoutEventLoggerKit= 1.2.4
JOSESwift= 2.2.1
Checkout3DS-Security= 3.2.4
 

  • 作者
  • 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 SDKs 设置的,因此您可以确保它与发卡行兼容,并确保您的客户敏感数据安全。

最低要求

适用于iOS的3DS SDK需要Xcode 13.1及以上版本以及Swift 5.6.2及以上版本,支持针对iOS 12.0及以上版本的App,同时也支持Objective-C。我们有两种方式来集成我们的3DS SDK。

安装

CocoaPods

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

确保您的机器上安装了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 => '[email protected]:checkout/checkout-3ds-sdk-ios.git', :tag => '3.1,0'
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

然后,配置您的App

集成

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 流程。 端到端独立 SDK 流程

代码片段

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事件记录工具包。

帮助和反馈

使用3D Secure SDK帮助或提交反馈,您可以给我们的团队发送邮件至 [email protected]

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

如果您有一个新功能想法,我们也乐意通过GitHub听到关于它的信息。请打开一个问题,详细说明您的想法以及它为什么对您的项目很重要。

授权许可

本软件依据授权许可发布。详情请参阅授权许可