MsuCse
示例
要运行示例项目,先克隆仓库,然后从 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返回
NO
或OPTIONAL
,您可以通过使用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: 包含两种方法的接口:
onSuccess
和onError
方法签名
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文件。