Wibmo3ds SDK
该 SDK 严格按照 EMVCO 3-D Secure 协议和核心功能规范 2.1.0 版本进行设计
您需要在您的应用中使用 SDK,需要从 Wibmo Inc 获取一个许可证密钥。
请联系我们以获取许可证密钥,邮箱:[email protected]
Wibmo3ds SDK 已通过 EMVCO 认证,详情见 EMVCO 认证
集成
集成 Wibmo3ds SDK 到您的 iOS 应用中的步骤。SDK 现已支持 Obj-C,与 Objective-C 应用程序集成。
重要
您必须拥有 Wibmo Inc 授权的许可证密钥才能使用 SDK。
系统要求
- Swift 5.0+
- Xcode 10.1+
- iOS 部署目标 10.0+
将Wibmo3ds SDK作为iOS应用程序的依赖项添加
CocoaPods
- 在您的项目Podfile中,在您的应用程序目标下包括
pod 'Wibmo3ds’, '~> 1.1.0'
。 - 然后执行pod install。
以下是一个在AppDelegate
实现中的示例,但应用程序制作者可以按需调用它。只需确保Wibmo3ds.shared.initialize...在每次应用程序启动时只调用一次。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
fileprivate func setupWibmo3ds() throws {
let licenceKey = "eyJ4NWMiOlsiTUlJRGhEQ0NBbXlnQXdJQkFnSUVYUU9NV0RBTkJna3Foa2lHOXcwQkFRc0ZBRENCZ3pFTE1Ba0dBMVVFQmhNQ1NVNHhFakFRQmdOVkJBZ01DVXRoY201aGRHRnJZVEVTTUJBR0ExVUVCd3dKUW1WdVoyRnNkWEoxTVE0d0RBWURWUVFLREFWM2FXSnRiekVVTUJJR0ExVUVDd3dMUlc1bmFXNWxaWEpwYm1jeEpqQWtCZ05WQkFNTUhYZHBZbTF2TFhOMFlXZHBibWN0YzJSckxXbHZjeTFzYVdObGJuTmxNQjRYRFRFNU1EWXhOREV5TURBeU5Gb1hEVEkwTURZeE5ERXlNREF5TkZvd2dZTXhDekFKQmdOVkJBWVRBa2xPTVJJd0VBWURWUVFJREFsTFlYSnVZWFJoYTJFeEVqQVFCZ05WQkFjTUNVSmxibWRoYkhWeWRURU9NQXdHQTFVRUNnd0ZkMmxpYlc4eEZEQVNCZ05WQkFzTUMwVnVaMmx1WldWeWFXNW5NU1l3SkFZRFZRUUREQjEzYVdKdGJ5MXpkR0ZuYVc1bkxYTmtheTFwYjNNdGJHbGpaVzV6WlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSnZ6cTAxY2FwK2hwNk96UzVhV2I4K3QxZjM5SldYWjZoNFh4clc3UjFORSt6emFZTWtqY1Y3WXIwTk15Wmx4bWhXTStMcFBGY001NzRNMUc4dkRNMjYvd21CMnBJSkNhSDJobnQ5RnNrZks1YXhmZlc2YXIzRWxzaGd5UCtSalhEcER5RHFRV0QrOGpIam1oTGZaWlhNelZjdGJuOEp3WUV5VUVuV3VvSjYyczRzZXNFV3VpSzZzbm0vQ2s4TEhMUEdZb0dGbXN4MDNrdXhST25nZVo3RWErOEwrMmFieG1VT0ZBREZhaGgrYjZoU2ZqTlRKbFZnSmpNbERLWHg3eWRtZUdlM0hHRmhmYWlDcnM2YzRGdWxoa1pwRnByMDlkRHpqOFNRY29yc2xVdzZzTmdHSlVSN3FSNDlTV3gwbGoxRWJtZ3BuUlJIMEVIdVgvclBFLzNNQ0F3RUFBVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBTHBMelhuUThMWE9CUC9YSjdjM3RaQWpuTkdCTzl1SXNlZlpHWlhjN1BURkdrbmI4ZmpKMVZERER5Ni9pbzBvY0J1aGFscGNvVkNrY3hpeEpRTlR1aENlaWp1djVKMGUxaFB4SEZIVENMUEc2eTdwZkRsYTNUdUlmL0E0NTN4c0cwVkFuQXVXcTNmb0x2d3FwR1h5OE9PVFdMK2xpSnYvS1pJVXRTaE1NenhVN1ViYnJsaFZCMHFTOERsUW9XdDFPUWZoSEdOMWFpT2Jjei9IUzRwR3hkK1M4dmtqMzdWWFY4TzQwKzJlQ2hVNkNNS1d3bkpOamJJQkhCN2t0T1hrWklrNVhpa2ppckRzSUNhckRrQndwS3YwUjZMclBvK2RKcXJ3enJOR0ZBVEJzNmtRSEJXc1hYNG1NSjFjYUY1cWdXV0o5Rjl5MndsVjdod3FlM2FMeGt3PT0iXSwiYWxnIjoiUFMyNTYifQ.eyJpc3N1ZXIiOiJ3d3cud2libW8uY29tIiwiaXNzdWVkVG8iOiJQYXkgVSIsImRhdGVPZklzc3VlIjoiMjAxOS0wNy0wOVQxMDoyMjoyMCswMDowMCIsImV4cGlyeURhdGUiOiIyMDIxLTA5LTA3VDAwOjAwOjAwKzAwOjAwIn0.LAUNllkls4ty2WRTvJ23QFM9GxaF_Xx8uUhIWyfWeWJgsDCwO94eNIc0ra0lhdKHT9W7ztu4gB7ssc7AJl9l9rOhCg3e4vYnlQnRtXSCtpCzbSJaTWFbGF6vOtsxoym8mJe4EYDkNgO4reW5lh0tn7nekSt8S_9NdlbYvi1I3Hbo-CLtozaTenPRp3LnA-rgT8ezZZl1f8jtjOerxwwrCOsJBrAVZSmUrVY_nMTsQdkKE4peSFBvNWs9_kD9SMz2ua77q-Deai__WFcKKrusgOk5ntAQ0cyHRAsHefUpMXadNVrcUYlkYJ9er51He8_Mr4475EELJlxyQxkm25POkw"
let rsaKeyValueMaster = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr/O0BfXWngO9OJDBsqdR5U2h28jrX6Y+LlblTBaYeT2tW7+ca3YzTFXA8duVUwdlWxl3JZCOOeL1feVP6g0TNOHVCkCnirVDLkcozod4aSkNvx+929aDr1ithqhruf0skBc2sMZGBBCNpso6XGzyAf2uZ2+9DvXoKIUYgcr7PQmL2Y0awyQN7KCRcusaotYNz2mOPrL/hAv6hTexkNrQKzFcPwCuc6kN6aNjD+p2CJ51/5p02SNS70nPOmwmg63j6f3n7xVykQ56kNc1l5B5xOpeHJmqk3+hyF1dF/47rQmMFicN41QSvZ5AZJKgWlIn2VQROMkEHkF9ZBRLx1nFTwIDAQAB"+".rsa"
let ecKeyValueVisa = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYktbLuAv0v52erE5LPscomKaOmQsvevxzOyn9k4sF1hqpBc5kUygzxA9Jl0R/2dTuk8ka7UCujk36xeUsLVpWA=="+".ec"
let masterDirectoryServerId = "B012345678"
let visaDirectoryServerId = "A000000003"
let configParams = ConfigParameters()
try configParams.addParam(nil, "Wibmo_License", licenceKey)
try configParams.addParam(nil, masterDirectoryServerId, rsaKeyValueMaster)
try configParams.addParam(nil, visaDirectoryServerId, ecKeyValueVisa)
try Wibmo3ds.shared.initialize(nil, configParams, nil, nil)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
do {
try setupWibmo3ds()
} catch {
//TODO: Implement Error Handling
}
return true
}
}
要启动事务
func btnPayTapped() {
do {
try setupWibmo3ds()
let masterDirectoryServerId = "B012345678"
let transaction = try Wibmo3ds.shared.createTransaction(masterDirectoryServerId, "2.1.0")
let authenticationRequestParameters = transaction?.getAuthenticationRequestParameters()
//TODO: Use <authenticationRequestParameters> to create Areq, and send Areq request
let progressView = try transaction?.getProgressView()
//TODO: Show progress view on the UI till Ares is not received.
if true {
//Success (Frictionless)
transaction?.close()
}
else {
//Challenge
let challengeParameters = ChallengeParameters(a3DSServerTransactionID: "a3DSServerTransactionID", acsTransactionID: "acsTransactionID", acsRefNumber: "acsRefNumber", acsSignedContent: "acsSignedContent", threeDSServerTransactionID: "threeDSServerTransactionID", acsRenderingType: .text)
try transaction?.doChallenge(challengeParameters, self, 5) //5 minutes
}
} catch {
//TODO: Implement Error Handling
//transaction?.close()
}
}
注意:根据3DS 2.0协议,可以自定义UI以匹配应用程序主题,但这部分文档未涵盖。
对于进一步查询,请将邮箱发送至 [邮箱 受保护]