信用付纯支付 iOS SDK 接入文档

一.概述 Introduction

下载demo工程

Snaplii信用付SDK

二.接入前准备

申请一个业务方标识appId,初始化SDK时传入。

开发环境: Xcode.

三.名词解释 Glossary

Partner: 第三方接入方

SDK: Snaplii信用付sdk

用户: 使用接入方宿主app的用户

信用付: Snaplii提供的支付产品

PT: Personal Token。代表接入方的一个用户ID,推荐使用接入方用户ID的一个hash值,不同的用户要确保value不一样。

AppId: App在Snaplii注册的应用标识ID, 由Snaplii分配给第三方。

App Secret: 第三方接入方应用secret,由Snaplii分配。

OTP: One Time Password。基于时间的,用app secret转为base32的字符串后作为key。

orderStr: 订单order String,其格式类似为

{
	"outterOrderNo":"a275702d001746caace8b40b25a09df6",  
	"orderAmount":"0.01",  
	"personalToken":"9077777766",  
	"sign":"+LtDS7AFES\/k3ttx8yd46TSMlQM="  
}

其中“sign"为签名,签名方式请参照"信用付SDK服务端接入文档"

四. OTP生成算法

One time passcode是采用标准的基于时间的TOTP算法,目前设置的有效时间跨度为1分钟。OTP的密钥为app secret + personal token拼接而成。密钥算法为"HmacSHA1"。Python算法可参照:

secret_key= secret + pt
key_str = base64.b32encode(secret_key.encode('utf-8')).decode("utf-8")
pyotp.TOTP(key_str, digest="sha1", interval=60).now()

其他语言的实现可参照对应的实现文档

五. 服务端准备工作: partner服务端Server准备

请参考服务端接入文档。

六. 客户端接入流程准备工作 (可参考文档中的demo代码工程)

步骤1:添加依赖库

通过 CocoaPods 导入 在podfile文件添加

pod 'AFNetworking', '~> 4.0.1'
pod 'Masonry', '~> 1.1.0'
pod 'MJExtension', '~> 3.4.1'
pod 'MBProgressHUD', '~> 1.2.0'
pod 'YYCache', '~> 1.0.4'
pod 'AcuantiOSSDKV11/AcuantCamera', '~> 11.5.8'
pod 'AcuantiOSSDKV11/AcuantFaceCapture', '~> 11.5.8'
pod 'AcuantiOSSDKV11/AcuantHGLiveness', '~> 11.5.8'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if ['AcuantiOSSDKV11', 'Socket.IO-Client-Swift', 'Starscream'].include? target.name
      target.build_configurations.each do |config|
        config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
      end
    end
  end
end

步骤2:权限配置

为正常完成良好的支付流程体验以及支付风控需要,info.plist中的开启以下的权限

Privacy - Camera Usage Description相机权限App needs your consent to access the camera to scan the card information. If it is forbidden, it will not be able to obtain the card information
Privacy - Location When In Use Usage Description定位权限App needs your geographic location to show you local promotions

步骤3:初始化SDK Initialize SDK

SnapliiSDKManager.defaultService().initAppId(APP_ID, language: lang, personalToken: pt, customerData: "") { [weak self] responseCallback in
    guard let strongSelf = self else {
        return
    }
    strongSelf.getOtp { result, error in
        if let opt = result {
            responseCallback(opt)
        } else if let error = error {
            dump(error)
        }
    }
}

步骤4:选择信用付支付时,判断是否登录,未登录调用登录接口

let hasLogin = SnapliiSDKManager.defaultService().hasLogin()
if (!hasLogin) {
    SnapliiSDKManager.defaultService().login(self) { success, message in

    }
}

步骤5: 支付 Start a Payment

SnapliiSDKManager.defaultService().payment(sign, orderAmount: amount, outterOrderNo: outterOrderNo, viewController: self) { [weak self] success, message in
    guard let strongSelf = self else { return }
    dump("Payment result: \(message ?? "success")")
}

[可选配置接口] configurations

1.登出现有信用付账号,切换手机号:

SnapliiSDKManager.defaultService().logout()

2.配置语言:

SnapliiSDKManager.defaultService().setLanguage(lang)

五.SDK接口说明

  • 初始化SDK
    商户APP工程中引入依赖后,调用API前,需要先向注册您的AppId,代码如下:

- (void)initAppId:(NSString *)appId language:(NSString *)language personalToken:(NSString *)personalToken customerData:(NSString *)customerData callback:(OTPCallback)callback;

typedef void(^GetOTPBlock)(NSString *otp);
typedef void(^OTPCallback)(GetOTPBlock getOTPBlock);
参数类型说明
appIdNSString后台注册的App标识
langNSString语言设置zh/en
personalTokenNSStringPersonal Token
coustomDataNSString业务自定义参数
callbackOTPCallbackapp通过callback把otp设置给sdk
  • 登录

- (void)login:(UIViewController *)currentController callback:(LoginCallback)callback;

typedef void (^LoginCallback)(BOOL success, NSString * _Nullable message);
参数类型说明
_ currentControllerUIViewControllercurrentController
callbackLoginCallback登录结果的回调
  • 支付
    - (void)payment:(NSString *)paymentSign orderAmount:(NSString *)orderAmount outterOrderNo:(NSString *)outterOrderNo viewController:(UIViewController *)viewController callback:(PayResultCallback)callback;
typedef void (^Callback)(BOOL success, NSString * _Nullable message);
参数类型说明
_paymentSignNSStringpaymentSign
orderAmountNSString信用付支付order string
outterOrderNoNSString支付结果的回调
viewControllerUIViewControllercurrentController
callbackPayResultCallback支付回调
  • 检查是否登录

- (BOOL)hasLogin;

  • 退出登录

- (void)logout;

  • 设置语言

- (void)setLanguage:(NSString *)language;

参数类型说明
valueNSStringzh/en

六.测试和发布

在应用发布之前,需要仔细测试集成的支付 SDK 功能,确保支付过程流畅且无错误。一旦确信支付功能已经正常工作,就可以将你的应用发布到市场上供用户使用。