前言
人脸认证的有两个
可以通过下面的链接查看开通的是哪个
https://b.alipay.com/page/product-workspace/all-product
两者的区别
https://opendocs.alipay.com/open/02zlo2
文档上人脸认证是没有小程序端的,但是实际是有的,是官方后续添加支持的,文档没更新。
两者如果在小程序上用
认证的姓名和身份证号要求和登录的支付宝绑定的姓名和身份证保持一致。
人脸认证在移动应用和网页应用上使用时则没有上面的要求。
支付宝身份验证
https://opendocs.alipay.com/open/03oebe?pathHash=23ac7ae7&ref=api
这个和人脸识别在服务端调用是不一样的,在小程序端是一样的。
注意
认证的姓名和身份证号要求和登录的支付宝绑定的姓名和身份证保持一致。
服务端-初始化身份认证单据号
初始化身份认证单据号 返回certify_id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.domain.OpenCertifyMerchantConfig; import com.alipay.api.domain.OpenCertifyIdentityParam; import com.alipay.api.request.AlipayUserCertifyOpenInitializeRequest; import com.alipay.api.response.AlipayUserCertifyOpenInitializeResponse; import com.alipay.api.domain.AlipayUserCertifyOpenInitializeModel;
import com.alipay.api.FileItem; import java.util.Base64; import java.util.ArrayList; import java.util.List;
public class AlipayUserCertifyOpenInitialize {
public static void main(String[] args) throws AlipayApiException { AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
AlipayUserCertifyOpenInitializeRequest request = new AlipayUserCertifyOpenInitializeRequest(); AlipayUserCertifyOpenInitializeModel model = new AlipayUserCertifyOpenInitializeModel(); model.setBizCode("FACE"); OpenCertifyIdentityParam identityParam = new OpenCertifyIdentityParam(); identityParam.setCertType("IDENTITY_CARD"); identityParam.setCertName("张三"); identityParam.setCertNo("260104197909275964"); identityParam.setIdentityType("CERT_INFO"); model.setIdentityParam(identityParam); model.setOuterOrderNo("ZGYD201809132323000001234"); OpenCertifyMerchantConfig merchantConfig = new OpenCertifyMerchantConfig(); merchantConfig.setFaceReserveStrategy("reserve"); merchantConfig.setReturnUrl("https://xxx"); model.setMerchantConfig(merchantConfig); request.setBizModel(model);
AlipayUserCertifyOpenInitializeResponse response = alipayClient.execute(request); System.out.println(response.getBody());
if (response.isSuccess()) { System.out.println("调用成功"); } else { System.out.println("调用失败"); } }
private static AlipayConfig getAlipayConfig() { String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->"; String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->"; AlipayConfig alipayConfig = new AlipayConfig(); alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->"); alipayConfig.setPrivateKey(privateKey); alipayConfig.setFormat("json"); alipayConfig.setAlipayPublicKey(alipayPublicKey); alipayConfig.setCharset("UTF-8"); alipayConfig.setSignType("RSA2"); return alipayConfig; } }
|
服务端-生成认证URL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.response.AlipayUserCertifyOpenCertifyResponse; import com.alipay.api.domain.AlipayUserCertifyOpenCertifyModel; import com.alipay.api.request.AlipayUserCertifyOpenCertifyRequest;
import com.alipay.api.FileItem; import java.util.Base64; import java.util.ArrayList; import java.util.List;
public class AlipayUserCertifyOpenCertify {
public static void main(String[] args) throws AlipayApiException { AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
AlipayUserCertifyOpenCertifyRequest request = new AlipayUserCertifyOpenCertifyRequest(); AlipayUserCertifyOpenCertifyModel model = new AlipayUserCertifyOpenCertifyModel();
model.setCertifyId("OC201809253000000393900404029253");
request.setBizModel(model);
AlipayUserCertifyOpenCertifyResponse response = alipayClient.pageExecute(request, "GET"); String pageRedirectionData = response.getBody(); System.out.println(pageRedirectionData);
if (response.isSuccess()) { System.out.println("调用成功"); } else { System.out.println("调用失败"); } }
private static AlipayConfig getAlipayConfig() { String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->"; String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->"; AlipayConfig alipayConfig = new AlipayConfig(); alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->"); alipayConfig.setPrivateKey(privateKey); alipayConfig.setFormat("json"); alipayConfig.setAlipayPublicKey(alipayPublicKey); alipayConfig.setCharset("UTF-8"); alipayConfig.setSignType("RSA2"); return alipayConfig; } }
|
小程序-进行认证
根据第1步的certify_id和第2步的url,小程序上进行认证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| my.startAPVerify({ url: this.certifyUrl, certifyId: this.certifyId, success: async (res) => { if (res.resultStatus === '9000') { uni.showToast({ title: '身份验证成功', duration: 2000 }); }
if (res.resultStatus === '6001') { uni.showToast({ title: '用户取消身份验证', duration: 2000 }); } }, fail: (res) => { uni.showToast({ title: '人像认证失败', duration: 2000 }); }, complete: (res) => {} });
|
小程序可以在本地提示成功后调用后台接口传入certifyId获取认证结果,后台返回成功才算认证成功。
服务端-查询认证结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.request.AlipayUserCertifyOpenQueryRequest; import com.alipay.api.domain.AlipayUserCertifyOpenQueryModel; import com.alipay.api.response.AlipayUserCertifyOpenQueryResponse;
import com.alipay.api.FileItem; import java.util.Base64; import java.util.ArrayList; import java.util.List;
public class AlipayUserCertifyOpenQuery {
public static void main(String[] args) throws AlipayApiException { AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
AlipayUserCertifyOpenQueryRequest request = new AlipayUserCertifyOpenQueryRequest(); AlipayUserCertifyOpenQueryModel model = new AlipayUserCertifyOpenQueryModel(); model.setCertifyId("OC201809253000000393900404029253"); request.setBizModel(model);
AlipayUserCertifyOpenQueryResponse response = alipayClient.execute(request); System.out.println(response.getBody());
if (response.isSuccess()) { System.out.println("调用成功"); } else { System.out.println("调用失败"); } }
private static AlipayConfig getAlipayConfig() { String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->"; String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->"; AlipayConfig alipayConfig = new AlipayConfig(); alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->"); alipayConfig.setPrivateKey(privateKey); alipayConfig.setFormat("json"); alipayConfig.setAlipayPublicKey(alipayPublicKey); alipayConfig.setCharset("UTF-8"); alipayConfig.setSignType("RSA2"); return alipayConfig; } }
|
报错
接口调用权限不足,解决方案:https://open.alipay.com/api/errCheck?traceId=0b44da2d17274573282387437e9b16&source=openapi
调用权限不足 要么是没开通,要么就是余额不足 可以核实下账号是否有余额
人脸认证
https://opendocs.alipay.com/open/0dqjce?pathHash=1a3e70ce&ref=api
认证流程
小程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
let url = ''; let certifyId = ""; my.startAPVerify({ url: url, certifyId: certifyId, success: function (res) { console.log('success', res) }, fail: function (res) { console.log('fail', res) }, complete: function (res) { console.log('complete', res) } })
|