概述
AI人脸识别,使用官方API:腾讯云人脸核身之独立H5接入。接口官方返回code = 0 表示成功,其他code码值均为对应码值信息,详见错误码。
注意:
1.合作方上送身份信息的计算签名参数与启动人脸核身计算签名参数不一致,有部分区别。
2.wbappid = webankAppId = app_id(如果我没理解错的话,API中介绍命名不同)
3.建议token和signticket一起做下20分钟定时刷新机制,保证缓存里的signticket是最新并且有效的
实现流程
合作方后台上送身份信息
- 前端入参:客户身份证号、客户姓名、from(App || browser)
- 后端固定参数:wbappid = webankAppId = app_id(API中介绍命名不同,注意)、orderNo(可自定义随机生成不唯一)、userId(可自定义随机生成不唯一)、version
- 获取signTicket(通过token)---- 获取方式代码见下
- 计算合作方上送身份信息签名,参数有:wbappid、orderNo、name、idNo、userId、version、signTicket ---- 计算方式代码见下
启动H5人脸核身
- 在合作方成功上送身份信息后,可以获取到h5faceId
- 获取nonce(32位随机数)
- 获取nonceTicket(通过token & userId)
- 计算启动H5人脸核身签名,参数有:wbappid、orderNo、userId、version、h5faceId、nonce、nonceTicket
- 将成功拉起人脸核身验证通过后的回调页面链接配置至配置文件,同时对该链接进行encode编码
- 获取到所有拉起人脸核身所需参数后,向链接https://ida.webank.com/api/web/login拼接上参数:webankAppId、version、nonce、orderNo、h5faceId、url、sign、from、userId。例如:
https://ida.webank.com/api/web/login?webankAppId="+wbappid+"&version=1.0.0&nonce="+nonce+"&orderNo="+orderNo+"&h5faceId="+h5faceId+"&url="+url+"&userId="+userId+"&sign="+sign+"&from="+userVo.getFrom()+"
拼接好后,直接将该链接返回前端去打开即可拉起人脸核身。请注意,该链接仅一次有效!!!
核心代码实现
获取accessToken
@Override
public String getToken(){
String accessTokenTencent = (String) redisService.get("accessTokenTencent");
log.info("获取redis中的accessToken,为:[{}]", accessTokenTencent);
if ("".equals(accessTokenTencent) || accessTokenTencent == null) {
Map<String, String> param = new HashMap<>(16);
String tokenUrl = "https://idasc.webank.com/api/oauth2/access_token?app_id={app_id}&secret={secret" +
"}&grant_type={grant_type}&version=1.0.0";
param.put("app_id", wbappid);
param.put("secret", secret)