Wibmo3ds 1.1.0

Wibmo3ds 1.1.0

Wibmo Inc 维护。



 
依赖
DeviceKit~> 2.0
SwiftyRSA~> 1.5
CryptoSwift~> 1.0
Alamofire~> 4.8
AlamofireImage~> 3.5
PKHUD~> 5.2
SwCrypt~> 5.1
 

Wibmo3ds 1.1.0

  • Wibmo Inc

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以匹配应用程序主题,但这部分文档未涵盖。

对于进一步查询,请将邮箱发送至 [邮箱 受保护]