文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 13:45

关注

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,进行人脸识别

示例:


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();
    }
}

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

<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结果为集合,实际为字符串,具体可根据返回的结果进行重新解析即可


作者:随心_8023


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯