人脸核身基础版 SDK 接入 > 合作方后台上送身份信息

文章目录

          • 一、概述
          • 二、实现流程
            • 2.1. 获取获取 access_token
            • 2.2. 获取 SIGN ticket
            • 2.3. 生成签名
            • 2.4. 上送身份信息
            • 2.5. 获取 NONCE ticket
          • 三、实战
            • 3.1. 获取获取 access_token
            • 3.2. 获取 SIGN ticket
            • 3.3. 生成签名
            • 3.4. 上送身份信息
            • 3.5. 获取 NONCE ticket
          • 四、开源地址

一、概述

人脸识别,使用官方API:腾讯云人脸核身之独立H5接入。接口官方返回code = 0 表示成功,其他code码值均为对应码值信息,详见错误码。

注意:
1.合作方上送身份信息的计算签名参数与启动人脸核身计算签名参数不一致,有部分区别。
2.wbappid = webankAppId = app_id

二、实现流程
2.1. 获取获取 access_token

文档: https://cloud.tencent.com/document/product/1007/37304

2.2. 获取 SIGN ticket

文档: https://cloud.tencent.com/document/product/1007/37305

2.3. 生成签名

文档: https://cloud.tencent.com/document/product/1007/35866

2.4. 上送身份信息

文档: https://cloud.tencent.com/document/product/1007/35866

2.5. 获取 NONCE ticket

文档: https://cloud.tencent.com/document/product/1007/37306

三、实战
3.1. 获取获取 access_token

app_id获取:https://cloud.tencent.com/document/product/1007/49634
secret获取:https://cloud.tencent.com/document/product/1007/49634
在这里插入图片描述

@Autowiredprivate RedisUtils redisUtils;@Value("${tencent-cloud.wbappid}")private String appId;@Value("${tencent-cloud.secret}")private String secret;/*** 获取 access_token* 文档: https://cloud.tencent.com/document/product/1007/37304** @return*/@Overridepublic String getAccessTokenTencent() {// 从redis中获取accessTokenTencentString accessTokenTencent = redisUtils.get("accessTokenTencent");log.info("获取redis中的accessToken,为:[{}]", accessTokenTencent);if (StringUtils.isEmpty(accessTokenTencent)) {String accessTokenUrl = String.format(TencentCloudConfig.ACCESS_TOKEN_URL, appId, secret);String jsonStr = HttpUtil.doGet(accessTokenUrl, null);log.info("返回报文;->{}", jsonStr);Map<String, String> jsonMap = ConvertUtils.stringToMap(jsonStr);if (!"0".equals(jsonMap.get("code"))) {String msg = jsonMap.get("msg");log.error("获取腾讯token信息错误,code:{},msg:{}", jsonMap.get("code"), msg);GraceJSONResult.errorMsg(msg);/*** 错误响应示例:* {*     "code": "66660000",*     "msg": "请求参数异常",*     "bizSeqNo": "22090720001184453210262184859700",*     "transactionTime": "20220907102621",*     "success": false,*     "expire_in": 0* }*/}/*** 正确响应示例:* {*  "code":"0","msg":"请求成功",*  "transactionTime":"20151022043831",*  "access_token":"accessToken_string",*  "expire_time":"20151022043831",*  "expire_in":"7200"* }*/// 获取 access_tokenaccessTokenTencent = jsonMap.get("access_token");// 过期时间 默认7200L  设置6800L提前重新获取redisUtils.set("accessTokenTencent", accessTokenTencent, 6800L);}log.info("返回有效accessToken,为:[{}]", accessTokenTencent);return accessTokenTencent;}
3.2. 获取 SIGN ticket

在这里插入图片描述

   /*** 获取 SIGN ticket* 请求地址: http://localhost:9900/getSignTicketTencent* 文档: https://cloud.tencent.com/document/product/1007/37305** @param accessTokenTencent access_token* @return*/@Overridepublic String getSignTicketTencent(String accessTokenTencent) {// 从redis中获取nonceTicketTencentString signTicketTencent = redisUtils.get("signTicketTencent");log.info("获取redis中的signTicketTencent,为:[{}]", signTicketTencent);String signTicketValue = null;if (StringUtils.isEmpty(signTicketTencent)) {String getSignTicketUrl = String.format(TencentCloudConfig.SIGN_TICKET_URL, appId, accessTokenTencent);String jsonStr = HttpUtil.doGet(getSignTicketUrl, null);log.info("返回报文;->{}", jsonStr);TicketDTO ticketDTO = JSON.parseObject(jsonStr, TicketDTO.class);if (!"0".equals(ticketDTO.getCode())) {String msg = ticketDTO.getMsg();log.error("获取腾讯signTicket信息错误,code:{},msg:{}", ticketDTO.getCode(), msg);GraceJSONResult.errorMsg(msg);}/*** 正确响应示例:* {*       "code": "0",*       "msg": "请求成功",*       "transactionTime": "20151022044027",*       "tickets": [*         {*              "value": "ticket_string",*              "expire_in": "3600",*              "expire_time": "20151022044027"*         }*     ]* }*/signTicketValue = ticketDTO.getTickets().get(0).getValue();// 过期时间 默认3600L  设置3200L提前重新获取redisUtils.set("signTicketTencent", signTicketValue, 3000L);}return signTicketValue;}
3.3. 生成签名

在这里插入图片描述

 /*** 合作方上送身份信息计算签名* API: https://cloud.tencent.com/document/product/1007/35866** @param userId     用户唯一标识,同一个用户的 userId 请保持一致,我们会根据 userId 来做防重复点击优化* @param signTicket 合作伙伴服务端获取的 ticket,注意是 SIGN 类型* @return*/@Overridepublic String sign(String userId, String signTicket) {//为计算签名做准备List<String> list = new ArrayList<>();list.add(appId);list.add(userId);list.add(SignUtils.GenerateRandom32Number());list.add(TencentCloudConfig.VERSION);return SignUtils.getSign(list, signTicket);}
package com.gblfy.tencent.cloud.utils;import com.gblfy.tencent.cloud.result.GraceJSONResult;
import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;import java.util.Collections;
import java.util.List;
import java.util.UUID;/*** Java 签名算法* 腾讯云文档: https://cloud.tencent.com/document/product/1007/37307** @author gblfy* @Date 2022-09-06**/
@Slf4j
@Component
public class SignUtils {//签名计算public static String getSign(List<String> values, String signTicket) {if (CollectionUtils.isEmpty(values)) {GraceJSONResult.errorMsg("签名计算 values is null");}// remove nullvalues.removeAll(Collections.singleton(null));values.add(signTicket);log.info("启动人脸核身签名排序前参数为:[{}]", values);java.util.Collections.sort(values);log.info("启动人脸核身签名排序后参数为:[{}]", values);StringBuilder sb = new StringBuilder();for (String s : values) {sb.append(s);}return Hashing.sha1().hashString(sb, Charsets.UTF_8).toString().toUpperCase();}//生成32位随机数public static String GenerateRandom32Number() {return UUID.randomUUID().toString().replace("-", "");}// public static void main(String[] args) {//     System.out.println(UUID.randomUUID().toString().replace("-", "").length());//     System.out.println(UUID.randomUUID().toString().replace("-", ""));// }
}
3.4. 上送身份信息

在这里插入图片描述

 /*** 合作方后台上送身份信息** @param faceDetectUserVO 身份信息* @return*/@Overridepublic GraceJSONResult sendIdentityInfoUserInfo(FaceDetectUserVO faceDetectUserVO) {//获取accessTokenString accessToken = getAccessTokenTencent();//获取signTicketString signTicket = getSignTicketTencent(accessToken);//合作方上送计算签名String sign = sign(signTicket, faceDetectUserVO.getUserId());String orderNo = faceDetectUserVO.getOrderNo();Map<String, String> param = new HashMap<>(16);param.put("webankAppId", appId);param.put("orderNo", orderNo);param.put("name", faceDetectUserVO.getName());param.put("idNo", faceDetectUserVO.getIdNo());param.put("userId", faceDetectUserVO.getUserId());param.put("version", TencentCloudConfig.VERSION);param.put("sign", sign);log.debug("合作方上送身份信息参数有:[{}]", param);String getFaceidUrl = String.format(TencentCloudConfig.GET_FACEID_URL, orderNo);String jsonStr = HttpUtil.doPost(getFaceidUrl, JSON.toJSONString(param));log.info("返回报文;->{}", jsonStr);TXIdentityInfoDTO txIdentityInfoDTO = JSON.parseObject(jsonStr, TXIdentityInfoDTO.class);log.info("合作方上送身份信息接口返回:[{}]", txIdentityInfoDTO);return GraceJSONResult.ok(txIdentityInfoDTO);}
3.5. 获取 NONCE ticket

在这里插入图片描述

 /*** 获取 NONCE ticket* 请求地址: http://localhost:9900/getNonceTicketTencent?userId=123456* 文档: https://cloud.tencent.com/document/product/1007/37306** @param userId 当前使用用户的唯一标识,需合作伙伴自行定义* @return*/@Overridepublic GraceJSONResult getNonceTicketTencent(String userId) {// 从redis中获取nonceTicketTencentString nonceTicketTencent = redisUtils.get("nonceTicketTencent");log.info("获取redis中的nonceTicketTencent,为:[{}]", nonceTicketTencent);// 获取access_tokenString accessTokenTencent = getAccessTokenTencent();String nonceTicketValue = null;if (StringUtils.isEmpty(nonceTicketTencent)) {String nonceTicketUrl = String.format(TencentCloudConfig.NONCE_TICKET_URL, appId, accessTokenTencent, userId);String jsonStr = HttpUtil.doGet(nonceTicketUrl, null);log.info("返回报文;->{}", jsonStr);TicketDTO ticketDTO = JSON.parseObject(jsonStr, TicketDTO.class);if (!"0".equals(ticketDTO.getCode())) {String msg = ticketDTO.getMsg();log.error("获取腾讯NonceTicket信息错误,code:{},msg:{}", ticketDTO.getCode(), msg);GraceJSONResult.errorMsg(msg);}/*** 正确响应示例:* {*       "code": "0",*       "msg": "请求成功",*       "transactionTime": "20151022044027",*       "tickets": [*         {*               "value": "ticket_string",*               "expire_in": "120",*               "expire_time": "20151022044027"*         }*     ]* }*/nonceTicketValue = ticketDTO.getTickets().get(0).getValue();// 过期时间 默认120L  设置100L提前重新获取redisUtils.set("nonceTicketTencent", nonceTicketValue, 100L);}return GraceJSONResult.ok(nonceTicketValue);}
四、开源地址

https://gitee.com/gblfy/tencent-cloud

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25802.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

身份证验证接口API(仅需一行代码,公安部实时接口)

身份确认在互联网越来越普及&#xff0c;在二手、电商、贷款、交友、招聘等主流互联网应用中都有明确的刚需&#xff0c;传统的 身份证核验方式是用户上传身份证图片&#xff0c;客服后台人肉审核&#xff0c;但问题在于根本无从确认身份证的真实性&#xff0c;也不能确认该身份…

危!GPT将影响80%工作岗位,挣得越多越危险?OpenAI发布重磅研究

源&#xff5c;新智元 GPT-4发布没几天&#xff0c;OpenAI直接告诉所有人&#xff0c;GPTs是通用技术&#xff0c;80%的美国人的工作受到影响。想要保命&#xff0c;且看这34大「铁饭碗」。 前脚刚推出GPT-4&#xff0c;OpenAI后脚就发布了35页论文官宣&#xff1a; 80%的美国人…

音视频技术开发周刊 | 286

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 比尔盖茨&#xff1a;AI 时代开启 盖茨谈到AI如何改善人类的不平等现象&#xff0c;并在医疗、教育等方面做出贡献&#xff0c;但也存在风险。 GPT-4 Copilot X震撼来袭&a…

对话 ClickHouse CTO Alexey:目光不仅限于成为最快的数据库 | 近匠

作为世界上最快的 OLAP 列式数据库之一&#xff0c;ClickHouse 能在毫秒级的时间内处理数百亿行的数据。ClickHouse 公司在官网上&#xff0c;也是简单扼要地介绍了自己的数据库&#xff1a;“Fast”。 ClickHouse 的灵魂人物 AlexeybMilovidov&#xff0c;则是一位将“慢”践行…

马斯克放话:没有我就没有 OpenAI,连名字都是我起的!

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 在 ChatGPT、GPT- 4 的爆火下&#xff0c;近来 OpenAI 这个名字已逐渐成为科技圈的“高频热词”&#xff0c;其创立初期与马斯克之间的“恩怨”也被时常提及。 有人说自从马斯克走后&#xff0c;Open…

阿里云版Chat-gpt申请内测

不允许你还不知道阿里云的chat-gpt&#xff0c;快去申请 -- 内测申请地址&#xff1a;通义千问

C++图像处理 -- 图像合成

阅读提示&#xff1a; 《C图像处理》系列以代码清晰&#xff0c;可读性为主&#xff0c;全部使用C代码。 《Delphi图像处理》系列以效率为侧重点&#xff0c;一般代码为PASCAL&#xff0c;核心代码采用BASM。 尽可能保持二者内容一致&#xff0c;可相互对照。 本文代码必须包括…

图像合成与图像融合

这一次我来给大家介绍一下图像合成与融合。 我们经常看到一些很奇妙的PS技术&#xff0c;例如下面这张&#xff0c;它把1928年的一位叫做Frankie Yale的黑帮老大被杀时的照片&#xff0c;与现在这栋房子的照片无缝融合在一起&#xff1a; 还有这张&#xff0c;将1945年柏林街道…

Chrome安装油猴插件详细教程

Chrome安装油猴插件详细教程 一、油猴安装方法 方法一&#xff1a;Google官方商店安装&#xff08;推荐&#xff0c;需要科学上网&#xff09; 方法二&#xff1a;本地安装&#xff08;无需科学上网&#xff0c;不会科学上网的适用&#xff09; 二、安装油猴插件 方法一&am…

Tampermonkey 油猴脚本,chrome插件

tampermonkey脚本是一款在谷歌浏览器上经常使用到的浏览器脚本插件&#xff0c;油猴脚本不仅为用户提供了大量的免费脚本插件外&#xff0c;而且还可以帮助你对这些脚本插件进行统一管理&#xff0c;当有最新版本的脚本推出的时候&#xff0c;它会帮助你进行自动更新。当然&…

手机上使用油猴插件 Tampermonkey

油猴 即 Tampermonkey中文名俗称油猴&#xff0c;是一款浏览器上的扩展&#xff0c;用户可以通过Tampermonkey添加和使用脚本&#xff0c;而脚本是一种可以修改网页JavaScript的程序。 在PC端&#xff0c;可以通过 Chrome浏览器的扩展程序&#xff0c;再结合 脚本 可以实现各种…

Tampermonkey油猴插件安装使用

Tampermonkey油猴插件安装使用 Tampermonkey油猴插件——安装与使用教程 Tampermonkey的crx文件&#xff0c;将下载下来的压缩包解压出来&#xff0c;其中类型为CRX文件 就是接下来需要用到的安装文件 打开浏览器设置&#xff0c;打开扩展程序页面&#xff0c;或者直接搜索Chr…

关于油猴(Tampermonkey)

油猴Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于多款常见的浏览器。 前言 那么&#xff0c;油猴具体能干啥&#xff1f; 它可以让我们使用浏览器时更加便捷。 比如说&#xff0c;对于一些网页限制的解除&#xff0c;某度盘文件直接…

Tampermonkey油猴插件——安装与使用教程

安装步骤&#xff1a; Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。 油猴插件下载网址&#xff1a;Tampermonkey • Home Beta是测试版&#xff1b; Stable是稳定版&am…

安装油猴(Tampermonkey)插件,让你的浏览器更强大

插件是什么 插件及扩展程序&#xff0c;目前大多数软件及程序都提供了安装插件的功能&#xff08;edge&#xff0c;chrome&#xff0c;vscode&#xff0c;pycharm&#xff0c;office等&#xff09;&#xff0c;游戏外挂也是一种插件&#xff0c;这也是使程序功能强大的手段&…

油猴脚本(Tampermonkey)的简介

油猴脚本的使用 什么是油猴脚本 「油猴」可以通过安装各类脚本对网站进行定制。当然伟大的脚本面向的是所有上网者&#xff0c;所以借由各位大神的脚本我们能实现更多更强大的功能&#xff0c;例如&#xff1a; 直接下载百度网盘文件(全速)重新定制繁杂的微博页面去掉视频播放…

ChatGpt-2 对话单页功能实现vue3+elementplus

接口可参照CHATGPT.NET自行实现 <script setup> import { RouterLink, RouterView } from "vue-router"; import HelloWorld from "./components/HelloWorld.vue"; import { MoreFilled ,CircleCheck} from "element-plus/icons-vue"; …

超乎你的想象AI绘画

(https://img-blog.csdnimg.cn/d1e19127400749818fde963723a194a9.png)(https://img-blog.csdnimg.cn/b8535f2f0b4f402ea2003ec8f352d11e.png)

【5月比赛合集】80场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 Kaggle&#xff08;10场比赛&#xff09;阿里天池&#xff08…

#世界杯征文活动 #Python #2022卡塔尔世界杯 #FIFA World Cup Qatar 2022 # 机器学习 #数据分析 用Python预测世界杯决赛

今天2022年11月29日的凌晨&#xff0c;葡萄牙队2比0获击败乌拉圭队&#xff01;葡萄牙队提前晋级16强&#xff0c;你熬夜看这场比赛了吗&#xff1f; 今天晚上11点荷兰将对战卡塔尔&#xff0c;NED(荷兰&#xff09;有望取胜&#xff01; 现在让我们通过Python数据分析以及机器…