android人脸身份认证,Android通过支付宝进行刷脸认证

Android通过支付宝进行刷脸认证

官方文档快速接入

一、简介

支付宝刷脸认证是通过支付宝人脸识别进行身份校验,主要包括三个模块身份认证初始化服务、开始认证、认证结果查询

二、应用场景

认证场景码 FACE SMART_FACE CERT_PHOTO CERT_PHOTO_FACE FACE_SDK

认证场景

多因子人脸认证

多因子证照和人脸认证

多因子证照认证

多因子快捷认证

(biz_code)

FACE

CERT_PHOTO_FACE

CERT_PHOTO

SMART_FACE

三、认证前准备

1.注册支付宝开放平台完成商户入驻流程,创建应用添加功能(身份验证)并进行签约;

2.你需要获取一个 应用 ID,并完成必要的开发 环境配置;

3.支付宝开放平台通过 HTTPS 通信进行接口调用,包含系统调用和页面转跳两类接口,相关概念参照 接口调用;参数的加密解密和加签验签参考

4.集成并配SDK,支付宝身份验证目前并未提供相应的客户端sdk,功能主要集中在后台服务中,后台完成相应的配置后,商户通关唤起支付宝app完成身份认证

四、整体流程

1.调用身份认证初始化服务 alipay.user.certify.open.initialize 接口进行认证初始化,并获取返回值certify_id。certify_id 是本次认证的标识,在后面的认证接口和查询接口会用到。

2.将生成的 certify_id 作为入参,调用身份认证开始认证服务接口 alipay.user.certify.open.certify 生成认证服务请求地址 (文档中有url示例)

3.用户完成认证后会通知商户结果。这个接口支持多种方式接入,可以灵活使用。重点必须在这个接口的请求中传入 return_url 才能回跳到商户, return_url 也支持多个协议 H5、小程序、商户App。

4.可以根据第一步返回的 certify_id 查询本次认证的状态和结果。

五、认证初始化以及生成认证请求url(服务端完成)

1.初始化服务

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");

AlipayUserCertifyOpenInitializeRequest request = new AlipayUserCertifyOpenInitializeRequest();

//构造身份信息json对象

JSONObject identityObj = new JSONObject();

//身份类型,必填,详细取值范围请参考接口文档说明

identityObj.put("identity_type", "CERT_INFO");

//证件类型,必填,详细取值范围请参考接口文档说明

identityObj.put("cert_type", "IDENTITY_CARD");

//真实姓名,必填

identityObj.put("cert_name", "张三");

//证件号码,必填

identityObj.put("cert_no", "260104197909275964");

//构造商户配置json对象

JSONObject merchantConfigObj = new JSONObject();

// 设置回调地址,必填. 如果需要直接在支付宝APP里面打开回调地址使用alipay协议,参考下面的案例:appId用固定值 20000067,url替换为urlEncode后的业务回跳地址

// alipays://platformapi/startapp?appId=20000067&url=https%3A%2F%2Fapp.cqkqinfo.com%2Fcertify%2FzmxyBackNew.do

merchantConfigObj.put("return_url", "alipays://platformapi/startapp?appId=20000067&url=https%3A%2F%2Fapp.cqkqinfo.com%2Fcertify%2FzmxyBackNew.do");

//构造身份认证初始化服务业务参数数据

JSONObject bizContentObj = new JSONObject();

//商户请求的唯一标识,推荐为uuid,必填

bizContentObj.put("outer_order_no", "506608c8141a4fc781538fb3e55029f9");

bizContentObj.put("biz_code", "FACE");

bizContentObj.put("identity_param", identityObj);

bizContentObj.put("merchant_config", merchantConfigObj);

request.setBizContent(bizContentObj.toString());

//发起请求

AlipayUserCertifyOpenInitializeResponse response = alipayClient.execute(request);

if (response.isSuccess()) {

System.out.println("调用成功");

//接口调用成功,从返回对象中获取certify_id

String certifyId = response.getCertifyId();

//执行后续流程...

} else {

System.out.println("调用失败");

}

2.生成认证url

//参考代码如下:

//获取alipay client

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");

AlipayUserCertifyOpenCertifyRequest request = new AlipayUserCertifyOpenCertifyRequest();

//设置certifyId

JSONObject bizContentObj = new JSONObject();

bizContentObj.put("certify_id", "2109b5e671aa3ff2eb4851816c65828f");

request.setBizContent(bizContentObj.toString());

//生成请求链接,这里一定要使用GET模式

AlipayUserCertifyOpenCertifyResponse response = alipayClient.pageExecute(request, "GET");

if(response.isSuccess()){

System.out.println("开始认证服务调用成功");

String certifyUrl = response.getBody();

//执行后续流程...

} else {

System.out.println("调用失败");

}

六、客户端(Android)操作,通过支付宝App内进行认证

1.填写基本信息,身份信息

2.唤起支付宝app,传入后台服务生成认证url,进行人脸识别

示例:

/**

* 启动支付宝进行认证

* @param url 开放平台返回的URL

*/

private void doVerify(String url) {

if (hasApplication()) {

Intent action = new Intent(Intent.ACTION_VIEW);

StringBuilder builder = new StringBuilder();

// 这里使用固定appid 20000067

builder.append("alipays://platformapi/startapp?appId=20000067&url=");

builder.append(URLEncoder.encode(url));

action.setData(Uri.parse(builder.toString()));

startActivity(action);

} else {

// 处理没有安装支付宝的情况

new AlertDialog.Builder(this)

.setMessage("是否下载并安装支付宝完成认证?")

.setPositiveButton("好的", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent action = new Intent(Intent.ACTION_VIEW);

action.setData(Uri.parse("https://m.alipay.com"));

startActivity(action);

}

}).setNegativeButton("算了", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

}).show();

}

}

/**

* 判断是否安装了支付宝

* @return true 为已经安装

*/

private boolean hasApplication() {

PackageManager manager = getPackageManager();

Intent action = new Intent(Intent.ACTION_VIEW);

action.setData(Uri.parse("alipays://"));

List list = manager.queryIntentActivities(action, PackageManager.GET_RESOLVED_FILTER);

return list != null && list.size() > 0;

}

3.认证完成后点击返回,应该返回到我们的App中,或者是一个H5的认证结果页,此时主要在初始化认证服务中的return_url中进行配置,简单介绍几种配置

H5 网页

H5网页提示,需要使用alipay协议,参考下面的案例:

alipays://platformapi/startappappId=20000067&url=https%3A%2F%2Fapp.cqkqinfo.com%2Fcertify%2FzmxyBackNew.do

Android客户端App

返回到商户App需要用到schema 协议,参考下面案例

scheme://face/certify

商户App配置,在Mainefest配置文件中配置需要用scheme协议跳转的Activity

android:name=".LoginActivity"

IOS配置

return_url中使用,weilvapp://

七、认证记录查询

1.人脸识别完成身份认证后,查询认证结果(服务端完成) 示例:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");

AlipayUserCertifyOpenQueryRequest request = new AlipayUserCertifyOpenQueryRequest();

request.setBizContent("{" +

"\"certify_id\":\"OC201809253000000393900404029253\"" +

" }");

AlipayUserCertifyOpenQueryResponse response = alipayClient.execute(request);

if(response.isSuccess()){

System.out.println("调用成功");

} else {

System.out.println("调用失败");

}

2.响应示例

{

"alipay_user_certify_open_query_response": {

"code": "10000",

"msg": "Success",

"passed": [

"T"

],

"identity_info": "{}",

"material_info": "{}"

},

"sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"

}

注:官方文档中给出的各类公共错误码,对返回结果进行比对,其中对身份认证结果的判断,官方sdk给出的api中的passed结果为集合,实际为字符串,具体可根据返回的结果进行重新解析即可