支付宝小程序:身份验证

小编:啊南 316阅读 2020.12.28

产品介绍 产品特色

  • 金融级安全防控:多年金融行业实名认证积累使得本产品具有精准识别身份冒用等风险防控能力。r

  • 流畅的用户体验:提供不同验证方式的智能组合接入,可以方便商户快速接入。身份认证过程流畅自然,体验良好,正常用户通过率高。r

  • 港澳台同胞身份验证:支持通过港澳台同胞来往内地通行证、居住证进行身份验证。

应用场景

支付宝身份核验适用于各类需要验证用户本人真实身份场景, 例如:

认证方案

认证场景码(biz_code)

功能描述

场景特征

多因子人脸认证

FACE

通过 API 唤起支付宝客户端,进行人脸识别、姓名和身份证号验证相结合的多因子实人认证。

对安全性要求高的线上实人开户、转帐、取现等场景。

多因子证照和人脸认证

CERT_PHOTO_FACE

通过 API?唤起支付宝客户端对身份证拍照,进行人脸识别、证照识别、姓名和身份证号验证相结合的多因子实人认证。

对安全性要求高,并对身份证照片有强制留存要求的互金线上实人开户、应用市场开发者认证等场景。

多因子证照认证

CERT_PHOTO

通过 API?唤起支付宝客户端对身份证拍照,进行证照识别、姓名和身份证号验证相结合的多因子实人认证。

对身份证照片有强制留存要求的场景。

多因子快捷认证

SMART_FACE

通过 API?唤起支付宝客户端,综合可信设备验证、环境验证等验证结果,智能决策是否直接通过,或者追加人脸识别、证照识别等验证方式的多因子实人认证。

对用户体验和通过率要求高的实人账号注册、登录、签到等场景。

应用案例

支付宝身份核验的交互流程如下图所示:

准入条件
  • 该能力仅对企业支付宝账户开放(除金融行业)。

  • 账户必须完成实名制认证。?

计费模式

支付宝身份验证产品采用“差额累进”的方式计费,具体计费规则如下表所示。

调用次数

0 < 调用量?≤ 1000

1000?< 调用量?≤ 1万

1万 < 调用量?≤ 10万

10万?< 调用量?≤ 20万

20万以上

区间费率

1 元/次

0.8?元/次

0.7?元/次

0.6?元/次

0.4?元/次

调用次数:即协议期内成功调用支付宝身份验证服务的总次数。协议期限指合约有限期,一般为一年。

计费方式:支付宝身份验证产品采用“差额累进”的计费方式,即按照调用次数划分费率区间,根据不同区间费率分别计算价格,相加之和为最终收费总额。各区间计费规则如上表所示。

示例说明

在合约有效期内,商家将用户的身份信息发给支付宝进行身份验证,无论发送多少次,收费都按实际成功验证次数实时扣取。

  • 如果验证成功900次,则费用金额=900次x1元/次=900元。

  • 2. 如果验证成功1100次,则费用金额=1000次x1元/次+100次x0.8元/次=1080元。

  • 3. 如果验证成功15000次,则费用金额=1000次x1元/次+9000次x0.8元/次+5000次x0.7元/次=11700元。

接入指引第一步:创建小程序

要在您的小程序内使用 支付宝身份验证功能,您需要首先完成 开发者入驻 并 创建小程序。

第二步:添加能力

小程序创建完成后,开发者登录?开放平台控制台?>?找到已创建的小程序?>?点击进入小程序管理后台?>?版本管理 页面的?能力列表?部分点击添加能力 >?勾选?身份认证?能力并点击 确定 完成能力添加。

开放平台服务端 SDK,包含 JAVA、PHP、NodeJS、Python 和 .NET 五种语言,封装了签名 & 验签、HTTP 接口请求等基础功能。请先下载对应语言版本的 SDK 并引入您的开发工程。

请额外引入下列三个 jar 包:

  • ?bcprov-jdk15on-1.62.jar?r

  • rfastjson-1.2.50.jar?r

  • rcommons-logging-1.1.1.jar

接口调用配置

在 SDK 调用前需要进行初始化,以 JAVA 代码为例:




AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);




关键参数说明

配置参数 示例值解释 获取方式/示例值
URL 支付宝网关(固定)。 ?https://openapi.alipay.com/gateway.do?
APPID APPID 即创建应用后生成。 获取见创建应用
APP_PRIVATE_KEY 开发者私钥,由开发者自己生成。 获取见配置密钥
FORMAT 参数返回格式,只支持 json。 json(固定)
CHARSET 编码集,支持 GBK/UTF-8。 开发者根据实际工程编码配置
ALIPAY_PUBLIC_KEY 支付宝公钥,由支付宝生成。 获取详见配置密钥
SIGN_TYPE 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2。 RSA2

接下来,就可以用 alipayClient 来调用具体的 API 了。alipayClient 只需要初始化一次,后续调用不同的 API 都可以使用同一个 alipayClient 对象。

第五步:调用接口支付宝身份验证调用接口流程
初始化身份认证单据号

准备接口必要参数,通过?alipay.user.certify.open.initialize?接口调用身份认证初始化服务,示例代码如下:




AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");rAlipayUserCertifyOpenInitializeRequest request = new AlipayUserCertifyOpenInitializeRequest();rrequest.setBizContent("{" +r""outer_order_no":"ZGYD201809132323000001234"," +r""biz_code":"FACE"," +r""identity_param":{"identity_type":"CERT_INFO","cert_type":"HOME_VISIT_PERMIT_HK_MC","cert_name":"支小宝","cert_no":"08510702"}," +r""merchant_config":{"return_url":"xxx"}," +r""face_contrast_picture":"xydasf=="" +r"}");rAlipayUserCertifyOpenInitializeResponse response = alipayClient.execute(request);rif(response.isSuccess()){rSystem.out.println("调用成功");r} else {rSystem.out.println("调用失败");r}r




重要入参说明
  • identity_param:需要验证的身份信息参数,格式为 json。

    • identity_type:身份信息参数类型,必填,必须传入 CERT_INFO 。

    • cert_type:证件类型,必填,当前支持:

      • IDENTITY_CARD:身份证。

      • HOME_VISIT_PERMIT_HK_MC:港澳居民来往内地通行证。

      • HOME_VISIT_PERMIT_TAIWAN:台湾居民来往内地通行证。

      • RESIDENCE_PERMIT_HK_MC:港澳居民居住证。

      • RESIDENCE_PERMIT_TAIWAN:台湾居民居住证。

    • cert_name:真实姓名,必填,填写需要验证的真实姓名,与证件类型对应。

    • cert_no:证件号码,必填,填写需要验证的证件号码,与证件类型对应。

  • bizCode:认证场景码。入参支持的认证场景码和商户签约的认证场景相关,取值如下:

    • FACE:多因子人脸认证

    • CERT_PHOTO:多因子证照认证

    • CERT_PHOTO_FACE :多因子证照和人脸认证

    • SMART_FACE:多因子快捷认证

更多参数详情参见?alipay.user.certify.open.initialize?(身份认证初始化服务)接口文档。

生成认证服务请求地址

将生成的 certify_id 作为入参,调用身份认证开始认证服务接口?alipay.user.certify.open.certify,示例代码如下:

生成认证请求URL




//参考代码如下://获取alipay clientAlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");AlipayUserCertifyOpenCertifyRequest request = new AlipayUserCertifyOpenCertifyRequest();//设置certifyIdJSONObject 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("调用失败");}




生成如下的认证 URL 样例

https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2015111100758155&biz_content=%7B%22certify_id%22%3A%22ZM201611253000000121200404215172%22%7D&charset=GBK&format=json&method=alipay.user.certify.open.certify&sign=MhtfosO8AKbwctDgfGitzLvhbcvi%2FMv3iBES7fRnIXn%2BHcdwq9UWltTs6mEvjk2UoHdLoFrvcSJipiE3sL8kdJMd51t87vcwPCfk7BA5KPwa4%2B1IYzYaK6WwbqOoQB%2FqiJVfni602HiE%2BZAomW7WA3Tjhjy3D%2B9xrLFCipiroDQ%3D&sign_type=RSA2&timestamp=2016-11-25+15%3A00%3A59&version=1.0&sign=MhtfosO8AKbwctDgfGitzLvhbcvi%2FMv3iBES7fRnIXn%2BHcdwq9UWltTs6mEvjk2UoHdLoFrvcSJipiE3sL8kdJMd51t87vcwPCfk7BA5KPwa4%2B1IYzYaK6WwbqOoQB%2FqiJVfni602HiE%2BZAomW7WA3Tjhjy3D%2B9xrLFCipiroDQ%3D

唤起身份验证页面

要使用小程序接入身份验证功能,唤起身份验证示例代码如下:




/**r  * 唤起认证流程r  * 参数: certifyId、url 需要通过支付宝 openapi 开放平台网关接口获取r  * 详细说明可查看文档下方的参数说明r **/rmy.startAPVerify({r    rurl: 'https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-java-4.9.5.ALL&app_id=2019111569179437&biz_content=%7B%22certify_id%22%3A%22a74bXXXXXXb0e4d42b9283bcfXXXXc1%22%7D&charset=UTF-8&format=json&method=alipay.user.certify.open.certify&sign=GPKGQpWQtkGWn98N%2F7HS8LOXli4dw1MH5LdK%2BZmR4k1j1PPvRubHZIq6jj5EQPi9CYtEYVGCUllb1pOGjgymWOGempjCiE9jx4CfyOD2SZ1JdTIw75dvkLQIlotd7Tli0BiaqCkpfv7b36bh2ORqFDGt8Zc50RI8AWqi8EyHDoMtq2ENGk8LXRcBNeeKUL0Fo9htOzgM3JXd5cqg8uPBhBawBAW7%2Bt5yT7dvogZYuMCAfaanUiPnjcWkxyobINxb4dusKybxRBHt0CXnxrLZi97Bdh6PnCqDZ36gYbw99P0TqG%2BJaUFWqLnbmu21OarI1m9aO6k1sFzb6g%3D%3D&sign_type=RSA2&timestamp=2020-05-28+18%3A12%3A04&version=1.0',rcertifyId: "your_certifyId",success: function (res) {r  console.log('success', res)r},rfail: function (res) {r  console.log('fail', res)r},rcomplete: function (res) {r  console.log('complete', res)r}r})




注意:身份验证功能只支持真机测试,且测试使用的支付宝账号须与?alipay.user.certify.open.initialize?接口中传入的用户保持一致。

验证本次认证结果入参 options
  • {String} certifyId?- 认证订单标识符,通过?alipay.user.certify.open.initialize?获取。

  • {String}?url?- 支付宝开放平台网关 URL,通过?alipay.user.certify.open.certify?获取。

回调函数出参

回调函数带入的参数?verifyResult: { resultStatus: 'xx', ?result: { } }

名称

类型

描述

resultStatus

string

认证流程结果状态码, 详见以下?ResultStatus?定义。

result.certifyId

string

本次认证流水号 certifyId。

result.errorCode

string

业务异常错误码。

注意:result 对象可能为 null, API 接入者代码逻辑需要做防御性处理,避免 NPE 异常。

ResultStatus

状态码

描述

9000

认证通过

6002

网络异常

6001

用户取消了业务流程,主动退出

4000

业务异常

注意:

  • resultStatus = 6001、6002 时,result 对象数据为空,接入者不需要获取 result 对象数据。

  • resultStatus= 9000?时,业务方需要去支付宝网关接口查询最终状态(由于前端数据是可篡改的)。

Status:4000

包含的部分 errorCode 如下表格所示

错误码

描述

UNKNOWN_ERROR

未知异常

SYSTEM_ERROR

系统异常

USER_IS_NOT_CERTIFY

用户未认证

...

其他

接入注意
  • 此文档只适用于支付宝客户端 App 内接入使用。

  • 支付宝版本号获取。




const matchResult = window.navigator.userAgent.match(/AliApp(AP/([d.]+))/i);const apVersion = (matchResult && matchResult[1]) || ''; // 如: 10.1.58.00000170




  • 版本比较可以使用?versioning?库。

  • startBizService。

API 列表

此列表包含该产品所涉及的所有接口,点击接口名可以查看接口的请求参数、返回参数、请求示例以及错误码等信息。

口英文名称

接口中文名称

alipay.user.certify.open.query

身份认证记录查询

alipay.user.certify.open.initialize

身份认证初始化服务

alipay.user.certify.open.certify

身份认证开始认证



关联标签: