H5人脸实名认证-百度云版

1,294 阅读4分钟

接口参考文档:

ai.baidu.com/ai-doc/FACE…

本文介绍了实名认证方案操作流程。

本方案使用于在微信小程序、公众号、H5等业务场景实现用户实名认证,如果您的场景是安卓/IOS系统的app场景,推荐采用app端实名认证方案

ai.baidu.com/ai-doc/FACE…

接入时序图

图片

接入流程

一、首先要创建一个百度云账号,在产品服务里有人脸识别。

图片

二、参考人脸实名认证 >>> 方案概览 >>> H5实名认证,先创建应用,后创建方案。

图片

三、创建应用得到 AppID、API Key和Secret Key ; 创建方案得到方案ID

图片

图片

四、获取Token,通过H5获取Token接口发起认证请求,获取verify_token信息

先通过第三步得到的API Key和Secret Key生成access_token

生成方法

向授权服务地址发送请求(推荐使用POST)

aip.baidubce.com/oauth/2.0/t…

grant_type: 必须参数,固定为client_credentials;

client_id: 必须参数,应用的API Key;

client_secret: 必须参数,应用的Secret Key;

· 通过POST请求URL获取access_token示例:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

· 通过Java获取access_token示例代码示例:

package com.baidu.ai.aip.auth; import org.json.JSONObject; import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;import java.util.Map; /** * 获取token类 */public class AuthService {       /**     * 获取权限token     * @return 返回示例:     * {     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",     * "expires_in": 2592000     * }     */    public static String getAuth() {         // 官网获取的 API Key 更新为你注册的        String clientId = "百度云应用的API Key";         // 官网获取的 Secret Key 更新为你注册的        String clientSecret = "百度云应用的Secret Key";         return getAuth(clientId, clientSecret);     }       /**     * 获取API访问token     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.     * @param ak - 百度云官网获取的 API Key     * @param sk - 百度云官网获取的 Securet Key     * @return assess_token 示例:     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"     */    public static String getAuth(String ak, String sk) {         // 获取token地址        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";         String getAccessTokenUrl = authHost                 // 1. grant_type为固定参数                + "grant_type=client_credentials"                 // 2. 官网获取的 API Key                + "&client_id=" + ak                 // 3. 官网获取的 Secret Key                + "&client_secret=" + sk;         try {             URL realUrl = new URL(getAccessTokenUrl);             // 打开和URL之间的连接            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();             connection.setRequestMethod("GET");             connection.connect();             // 获取所有响应头字段            Map<String, List<String>> map = connection.getHeaderFields();             // 遍历所有的响应头字段            for (String key : map.keySet()) {                 System.err.println(key + "--->" + map.get(key));             }             // 定义 BufferedReader输入流来读取URL的响应            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));             String result = "";             String line;             while ((line = in.readLine()) != null) {                 result += line;             }             /**             * 返回结果示例             */            System.err.println("result:" + result);             JSONObject jsonObject = new JSONObject(result);             String access_token = jsonObject.getString("access_token");             return access_token;         } catch (Exception e) {             System.err.printf("获取token失败!");             e.printStackTrace(System.err);         }         return null; } public static void main(String[] args) {         System.out.println("Access_token: " + getAuth());     } }

· 运行结果:得到Access_token

图片

通过上述生成的access_token获取verify_token

· 我们使用Postman 发送POST请求URL:

https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/verifyToken/generate?access_token=24.7f478f1f95d581d6f2f4006e0f904a95.2592000.1611283726.282336-23149109

URL中的信息填写如下所示:

(1)access_token:填写上面生成的access_token

(2)Body中放置请求参数 plan_id,即第三步得到的 方案ID

(3)Header:application/json

五、跳转实名认证H5 URL,用户进行操作

使用上一步返回的 verify_token 信息请求认证H5页面,进行用户端流程操作。

· 认证URL:

https://brain.baidu.com/face/print/?token=xxx&successUrl=https://xxx&failedUrl=https://xxx

URL中的信息填写如下所示:

(1)token:填写verify_token。

(2)successUrl:请求成功跳转的网址,网址需要加http/https前缀

(3)failedUrl:请求失败跳转的网址,网址需要加http/https前缀

图片

图片

图片

图片

认证通过后我们就可以使用 verify_token 和第四步生成的 access_token 获取认证结果及资料,返回用户认证信息

六、查询认证结果接口

· 使用Postman 发送POST请求URL:

https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/result/detail?access_token=24.7f478f1f95d581d6f2f4006e0f904a95.2592000.1611283726.282336-23149109

URL中的信息填写如下所示:

(1)access_token:填写第四步生成的 access_token

(2)Body中放置请求参数verify_token,即第四步获取到的 verify_token

(3)Header:application/json

{    "verify_token" : "cIupeyP51sn28XzxGVTfYqoN"}

返回参数

· 返回结果

字段

必选

类型

说明

success

boolean

返回请求是否成功信息。若请求成功返回ture;请求失败则返回fault

result

array

请求结果

+idcard_ocr_result

array

返回采集的用户人脸信息当人脸实名认证控制台设置为使用OCR识别时返回此参数信息

++address

string

地址

++birthday

string

生日

++name

string

姓名

++id_card_number

string

身份证号

++gender

string

性别

++nation

string

民族

++expire_time

string

身份证失效日期

++issue_authority

string

身份证签发机关

++issue_time

string

身份证生效日期

+verify_result

array

认证返还信息

++liveness_score

string

活体检测分数

++score

string

人脸实名认证

++spoofing

string

合成图分数若未进行合成图检测,则返回0若进行活体检测,则返回合成图检测分值

+idcard_confirm

array

用户二次确认的身份证信息

++name

string

姓名

++idcard_number

string

身份证号

· 返回结果

{     "success": true,     "result": {         "idcard_ocr_result": {             "address": "江苏省淮安市淮阴区XXX",             "birthday": "19691211",             "name": "孙XX",             "id_card_number": "320821XXXXXXX",             "gender": "女",             "nation": "汉",             "expire_time": "XXX",             "issue_authority": "XXX",             "issue_time": "XXX"         },         "verify_result": {             "liveness_score": 0.39,             "score": 11.65885925         },         "idcard_confirm": {             "name": "孙XX",             "idcard_number": "320821XXXXXXX"         }     },     "log_id": "1436111694"}