MsuCse 1.1.1

MsuCse 1.1.1

Jasmin Suljic 维护。



MsuCse 1.1.1

  • 作者
  • jasmin.suljic

MsuCse

CI Status Version License Platform

示例

要运行示例项目,先克隆仓库,然后从 Example 目录运行 pod install

客户端加密(CSE)

介绍

客户端加密是在卡数据通过其他介质(即商家服务器)之前在移动设备上加密客户敏感信息的方法。这种模型适合希望从其服务器进行 API SALE/PREAUTH 的商家,因为卡数据将在商家服务器上加密传递,从而避免商家端“托管”任何卡数据的责任。

工作原理

商家必须在他们的移动应用程序中包含 MSU iOS CSE SDK。

pod 'MsuCse'

步骤应该如下

  • 在应用中包含库
  • 初始化库
  • 用户填写完卡号前6位后,您可以发出一个SHOULDDO3D API调用以确定下一步操作
  • 客户已填写卡片数据并点击支付。如果SHOULDDO3D返回YES,则不需要CSE,因为客户敏感信息将通过Auth 3D流程从浏览器直接传递到MSU服务器。Auth 3D流中的一个请求参数是callbackUrl,这是商家端的一个端点,将接收最终的3D响应,包括如果3D验证成功则包含auth3DToken。这时,您可以使用包含auth3DToken调用API SALE
  • 如果SHOULDDO3D返回NOOPTIONAL,您可以通过使用CSE SDK Payment With New Card加密数据来跳过3D旅程并拦截主支付表单
// Do not forget to import lib
// import MsuCse
let cse = CSE(developmentMode: true)
cse.encrypt(pan: "4355084355084358", cardHolderName: "Test Test", expiryYear: 2020, expiryMonth: 12, cvv: "000", nonce: nonce()) {
            result in
            switch result {
                case .error(let e):
                    print(e)
                case .success(let r):
                    print(r)
            }
        }

使用现有卡/钱包支付,加密CVV

// Do not forget to import lib
// import MsuCse
let cse = CSE(developmentMode: true)
cse.encrypt(cvv: "123", nonce: nonce()) {
            result in
            switch result {
                case .error(let e):
                    print(e)
                case .success(let r):
                    print(r)
            }
        }

示例可在此链接找到

CSE SDK API 信息

确保您已在应用的Podfile文件中包含了库。

  • 包含库后实例化CSE
// Change this to false if production
// If set to true MSU test environment is used for encryption, meaning encrypted values with developmentMode = true will not work on production env
let cse = CSE(developmentMode: true)

cse对象上的可用方法

  • 加密卡片数据
    • pan: 有效的pan
    • cardHolderName: 非空字符串
    • expiryYear: 有效的年份,格式为YYYY
    • expiryMonth: 从1到12的值
    • cvv: 有效的cvv值,例如123对于VISA是有效的,1234则不是
    • nonce: 随机生成的字母数字值,最大长度16个字符
    • callback: 包含两种方法的接口:onSuccessonError

方法签名

func encrypt(pan: String,
             cardHolderName: String,
             expiryYear: Int,
             expiryMonth: Int,
             cvv: String,
             nonce: String,
             _ callback: @escaping EncryptCallback)
  • 为现有卡/钱包支付加密cvv
    • cvv: 有效的cvv
    • nonce: 随机生成的字母数字值,最大长度16个字符

方法签名

func encrypt(cvv: String, nonce: String, _ callback: @escaping EncryptCallback)
  • property hasErrors: 如果在加密过程中发生任何错误,则为true Property签名
var hasErrors: Bool { errors.count > 0 }
  • errors: 在加密过程中发生的错误列表
var errors: [String] = []
  • isValidCardHolderName: 如果持卡人姓名非空,则返回true Method签名
func isValidCardHolderName(_ name: String) -> Bool
  • isValidPan - 如果pan有效,则返回true Method签名
func isValidPan(_ pan: String) -> Bool
  • isValidCVV(cvv) - 如果cvv有效长度,则返回true Method签名
func isValidCVV(_ cvv: String) -> Bool
  • isValidCVV(cvv, pan) - 如果从pan检测到的品牌为cvv有效,则返回true Method签名
func isValidCVV(cvv: String, pan: String) -> Bool
  • isValidExpiry(month, year) - 如果有效期有效,则返回true Method签名
func isValidExpiry(month: Int, year: Int)
  • isValidCardToken - 如果卡标记长度大于或等于32且小于或等于64,则返回true Method签名
func isValidCardToken(_ token: String) -> Bool
  • detectBrand: 返回检测到的卡品牌,或CardBrand.UNKNOWN Method签名
func detectBrand(_ pan: String) -> CardBrand

用法示例可在此链接找到

许可协议

MsuCse可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。