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 服务器执行整个身份验证流程。
- 使用我们的
uiCustomization
对象设置您首选项的用户界面选项来初始化 SDK。 - 配置身份验证的参数。
- 请求身份验证并处理结果以继续您的支付流程。
- 身份验证函数现在返回
Result
类型,包含两种情况AuthenticationResult
带有transactionStatus
和sdkTransactionID
👉 关于交易状态的更多信息AuthenticationError
带有message
。
代码片段
// 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服务
- 使用我们的
uiCustomization
对象设置您首选项的用户界面选项来初始化 SDK。 - 创建
transaction
对象 - 获取AReq的
authenticationRequestParameters
- 如果您的3DS服务器从认证响应中强制要求挑战,则调用
doChallenge
方法来呈现挑战,但如果挑战不是由ACS强制要求,则它将触发无缝3DS流程。
端到端3DS流程
以下是使用我们的standalone3DSService
突出显示端到端3DS流程的有用图表。
代码片段
1-通过创建实例ThreeDS2Service
创建一个实例,3DS请求者应用可以通过它创建事务对象来获取执行挑战所需的authenticationRequestParameters
。
private var transaction: Transaction?
private var standalone3DSService: ThreeDS2Service?
2-使用您喜欢的用户界面选项初始化SDK
scheme
只能设置为小写字符串的visa
和mastercard
。
// 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
}
- 使用创建的
ThreeDS2Service
对象创建transaction
self.transaction = self.standalone3DSService?.createTransaction()
- 检索
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
}
}
- 处理
doChallenge
流程
- 如果返回的认证响应表明必须应用挑战流程,则3DS请求者应用调用带有所需输入
ChallengeParameters
的doChallenge
方法。该doChallenge
方法启动挑战过程。 doChallenge
函数现在返回带有两种情况的Result
类型AuthenticationResult
带有transactionStatus
和sdkTransactionID
👉 关于交易状态的更多信息AuthenticationError
带有message
。
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()
})
- 服务
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。