Checkout.com 的 3D Secure (3DS) 移动 SDK 允许您在移动应用中提供原生的 3DS2 体验,并可自定义视觉样式。
该 SDK 负责处理设备数据收集、与发卡行的通信,并在需要时向客户呈现 3D Secure 验证。
📚 阅读参考文档
我们已尽最大努力支持 iOS 上最常见的发布方法。 我们强烈支持 SPM (Swift Package Manager),但如果出于任何原因它不适合您,我们还支持 Cocoapods。
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 是 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
然后,配置您的应用程序以
此集成方法涉及调用我们的 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 允许我们的 SDK 与任何身份验证提供商一起使用,无论是 Checkout.com 还是其他提供商。 这是一种更高接触的集成,它可以更精细地分解 3DS 流程。 为了与独立的 3DS 服务集成
uiCustomization
对象,使用您首选的用户界面选项初始化 SDK。transaction
对象authenticationRequestParameters
doChallenge
方法来呈现验证,但是,如果 ACS 未强制进行验证,则会触发无摩擦的 3DS 流程。这是一个有用的图表,突出显示了使用我们的 standalone3DSService
的端到端 3DS 流程。
1- 通过它可以创建事务对象以获取执行质询所需的 authenticationRequestParameters
的 ThreeDS2Service
创建实例
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
流程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 依赖于一些外部库
如果您在使用 3D Secure SDK 时需要帮助,或者想传递您的反馈,您可以通过电子邮件联系我们的团队:support@checkout.com。
如果您发现了错误,我们鼓励您通过 GitHub 提出问题。 如果您的问题尚未列出,请详细说明您正在使用的 SDK 版本和您的开发环境,您希望完成什么以及您观察到的实际结果是什么。
如果您对新功能有想法,我们也希望通过 GitHub 了解它。 请 提出问题,详细说明您的想法以及为什么它对您的项目很重要。
此软件已获得许可发布。 有关详细信息,请参阅 LICENSE。