申请权限
SDK 需要使用到网络和相机权限,需要在 module.json5 文件中申请 ohos.permission.INTERNET 和 ohos.permission.CAMERA 权限,权限申请参考鸿蒙官方文档和示例 demo。
"requestPermissions": [{"name": "ohos.permission.INTERNET","reason": "$string:reason_internet","usedScene": {"abilities": ["FormAbility"],"when": "always"}},{"name": "ohos.permission.CAMERA","reason": "$string:reason_camera","usedScene": {"abilities": ["FormAbility"],"when": "inuse"}}]
SDK 集成
在 oh-package.json5 中添加 SDK 的依赖。


SDK调用流程
调用方法如下。
startOCRService 函数封装了 SDK 的调用,SDK 的调用流程可以分解为三个步骤:
合作方获取签名,SignTool 模拟合作方获取签名。
调用 WBOCRService.init 函数初始化 SDK。
init 成功之后,调用 WBOCRService.startService 开始识别。
注意:
init 和 start 成对调用,一次 init 一次 start。
卡片类型在 init 接口的 OCRParam.sdkType 里面设置。支持的卡片类型见 CardType 定义。
export enum CardType { idCard, idCardFrontSide, idCardBackSide, bankCard, vehicleLicenseHomePage, vehicleLicenseSecondaryPage, driverLicense, } startOCRService 的源代码如下。 startOCRService(type: CardType) { let service = WBOCRService.getInstance() let param = new OCRParam() let signTool = new SignTool() signTool.getSign().then((data) => { console.log(data); this.prompt = `sign:${data}` param.appId = signTool.appid param.orderNo = signTool.randomString(12) param.nonce = signTool.nonce param.userId = signTool.userid param.sign = data param.sdkType = type; service.init(param, { onSuccess: () => { console.log('SDK 初始化成功 - 调用 start 接口') service.startService({ onSuccess: (res: object) => { console.log('SDK 识别成功') console.log(JSON.stringify(res)) this.prompt = JSON.stringify(res) }, onFailure: (error: OCRError) => { console.error('SDK 识别失败!') console.error(JSON.stringify(error)) this.prompt = JSON.stringify(error) } }) }, onFailure: (error: OCRError) => { console.log('SDK 初始化失败!') console.log(JSON.stringify(error)) this.prompt = JSON.stringify(error) } }) }).catch((e: BusinessError) => { console.error(`err:${e.code},${e.message},${e.name}`) this.prompt = `err:${e.code},${e.message},${e.name}` }) }
接入方 App 需要接收和处理 init 以及 start 接口的回调结果。
其中,卡片识别结果定义在如下几个类里面,不同的卡片类型,对应相应类型的结果对象。
银行卡识别
银行卡识别的时候,入参卡片类型选择 bankCard,返回值类型定义如下。
/** * @brief 银行卡信息 * @detail 字段含义 - bankcardFullImg 银行卡识别的照片 - bankcardNoPhoto 银行卡卡号切图 - bankcardNo 银行卡号 - bankcardValidDate 银行卡有效期(年/月,没有为空) - warningCode 警告码 - warningMsg 警告码描述 - multiWarningCode 多重警告码 - multiWarningMsg 多重警告码描述 - clarity 图片清晰度 - bankcardInfo 卡片信息 - bankcardType 卡片类型 - bankcardName 卡片名称 */ export class BankCardModel extends KYCOCRBaseModel { bankcardFullImg = '' bankcardNoPhoto = '' bankcardNo = '' bankcardValidDate = '' warningCode = '' warningMsg = '' multiWarningCode = '' multiWarningMsg = '' clarity = '' bankcardInfo = '' bankcardType = '' bankcardName = '' }
Harmony OCR 错误码
返回码 | 返回信息 | 处理措施 |
100100 | 传入 SDK 参数不合法 | 检查传入参数是否合法 |
100101 | SDK 未登录 | 未登录 SDK (调用 startOCRService 之前,需要调用 init 登录) |
100103 | App 没有相机权限 | App 没有相机权限 |
200101 | 用户取消操作 | 用户主动退出操作 |
200102 | 识别超时 | 用户在身份证正反面识别过程中超过设定的阈值(20S)无法识别,提示超时 |
300101 | 不合法请求(300102) | 检查传入参数是否正确 |
300102 | 网络出小差啦 | 更换网络环境 |
400100 | SDK 重复进入 | 重复调用 SDK |