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服务器执行整个认证流程。
- 使用我们的
uiCustomization
对象,通过您首选的用户界面选项初始化SDK。 - 配置认证参数。
- 请求认证并处理结果以继续您的支付流程。
- 认证函数现在返回
Result
类型,包含两种情况- 带有
transactionStatus
和sdkTransactionID
的AuthenticationResult
👉 有关交易状态的更多信息 - 带有
message
的AuthenticationError
- 带有
代码片段
// 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
类型- 带有
transactionStatus
和sdkTransactionID
的AuthenticationResult
👉 有关交易状态的更多信息 - 带有
message
的AuthenticationError
- 带有
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事件记录工具包。
帮助和反馈
使用3D Secure SDK帮助或提交反馈,您可以给我们的团队发送邮件至 [email protected]。
如果您发现了BUG,我们鼓励您通过GitHub打开一个问题。如果您的故障问题尚未列出,请详细说明您正在使用的SDK版本和开发环境,您希望完成什么以及您观察到的实际结果。
如果您有一个新功能想法,我们也乐意通过GitHub听到关于它的信息。请打开一个问题,详细说明您的想法以及它为什么对您的项目很重要。
授权许可
本软件依据授权许可发布。详情请参阅授权许可。