本文指导您在 iOS 应用中集成金融级实人认证服务。

前提条件

  • 应用必须在 iOS 9.0+ 平台上运行。
  • 您必须采用 Objective C++ 集成金融级实人认证服务。
  • 您的应用中未集成支付宝支付 SDK。如果您的应用中已经集成了支付宝 mPaaS 版支付SDK,请参见 iOS 客户端接入(mPaaS 版)

获取 SDK 和 Demo 代码

点击即可下载对应版本的 SDKcode demo

您可以在这个文件的注释中确认您使用的 SDK 的版本号:AlipayVerifySDK.framework/Headers/APVerifyService.h

开发环境配置

  1. info.plist 中配置摄像头权限请求。
    摄像头权限
  2. Xcode 的编译设置中关闭 Bitcode 选项。
    关闭Bitcode
  3. Xcode 编译设置的 Linking > Other Linker Flags 中,添加设置 -ObjC -framework "BioAuthAPI" -lxml2
    添加设置
  4. Xcode 调试设置的 Edit Scheme > run > Options 中禁用 Metal API Validation
    禁用设置

添加 framework 文件和 bundle 文件

注意 步骤 1 和步骤 2 是开发过程中的必须步骤,请勿忽略。
  1. 引入 SDKframeworks 文件夹下所有的 framework 到工程之中。
    framework
  2. 找到并拷贝以下四个 bundle 文件,并将其手动链接到工程。bundle 文件在同名的 framework 文件中。
    选择 TARGETS,单击 Build Phases 标签页,在 Copy Bundle Resources 中添加如下四个 bundle:
    • APBToygerFacade.bundle:位于 APBToygerFacade.framework
    • ToygerService.bundle:位于 ToygerService.framework
    • BioAuthEngine.bundle:位于 BioAuthEngine.framework
    • AlipayVerifyBundle.bundle:位于framework
    bundle
  3. 添加系统库。
    Linked Framweworks and Libraries 中添加如下 iOS 系统库:添加系统库
  4. 添加支付宝认证库。
    添加支付宝认证库

调用API

引用头文件,并尽早初始化。

#import<AlipayVerifySDK/APVerifyService.h>
[ZolozSdk init] // 尽早初始化

调用 startVerifyService

#import <AlipayVerifySDK/APVerifyService.h>
[[APVerifyService sharedService] startVerifyService:@{@"url": url?:@"",
                                                @"certifyId": @"test-certifyId",
                                                      @"ext": @"test-extInfo"
                                                          } 
 target:self 
 block:^(NSMutableDictionary * resultDic){
    NSLog(@"%@", resultDic);
}];

输入参数

参数名称 参数说明
options 包含两个参数:
  • 认证 url。该参数从应用服务端获得。
  • 本次认证的认证 ID。该参数从应用服务端获得。
@"certifyId": @"test-certifyId",// 认证流水号,从商家服务端获得
@{
@"url":url?:@"",
@"certifyId": @"test-certifyId",
}
targetVC 当前 controller,必须有根 navigationController,且需要隐藏 navigationBar 再进入 SDK,回来后恢复,因为 SDK 内部已有自定义 navigationBarView
block 返回的结果,在 resultDic 里面获取。

返回结果

回调函数带入的参数形式如下:

result: {resultStatus: 'xx',  
         result: { }
        }
名称 类型 描述
resultStatus string 认证流程结果状态码, 详见以下 ResultStatus 定义
result.certifyId string 本次认证流水号 certifyId
result.errorCode string 业务异常错误码
说明 result 对象可能为 null,API 接入者代码逻辑需要做防御性处理,避免 NPE 异常。

ResultStatus 枚举定义如下:

状态码 描述
9000 认证通过
6002 网络异常
6001 用户取消了业务流程,主动退出
4000 业务异常
说明
  • resultStatus = 6001、6002 时,result 对象数据为空,接入者不需要获取 result 对象数据。
  • resultStatus= 9000 时,业务方需要去查询认证结果接口查询最终状态(由于前端数据是可篡改的)。
<Status:4000> 包含的部分 errorCode 如下表格所示 :
错误码 描述
UNKNOWN_ERROR 未知异常
SYSTEM_ERROR 系统异常
USER_IS_NOT_CERTIFY 用户未认证
... 其他