支付宝小程序身份认证(拉取人脸识别 认证功能 +详细案例)
交互流程
支付宝身份核验的交互流程如下图所示:
接入指引
第一步:创建小程序
第二步:添加功能
第三步:签约功能
第四步:调用接口
其中前三步看 开发文档:https://opendocs.alipay.com/mini/introduce/alipay-verfify
接口代码:
@GetMapping("/shenfenrz")@ResponseBodypublic HashMap<String, String> shenfenrz(String sfzh, String xm, String appid) throws AlipayApiException {HashMap<String, String> map = null;map = new HashMap<>();int i = sfrz.getapp_id(appid,sfzh,xm);System.err.println(i);if (i == 0) {AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);AlipayUserCertifyOpenInitializeRequest request = new AlipayUserCertifyOpenInitializeRequest();
// new AlipayUserCertifyInfoApplyRequest();//构造身份信息json对象JSONObject identityObj = new JSONObject();//身份类型,必填,详细取值范围请参考接口文档说明identityObj.put("identity_type", "CERT_INFO");//证件类型,必填,详细取值范围请参考接口文档说明identityObj.put("cert_type", "IDENTITY_CARD");//真实姓名,必填String regex = "\\d{15}(\\d{2}[0-9xX])?";String id = sfzh;if (id.matches(regex)) {//证件号码,必填identityObj.put("cert_no", sfzh);} else {map.put("message", "请认真核对身份证证件号码信息");map.put("success", "false");}identityObj.put("cert_name", xm);//证件号码,必填
// identityObj.put("cert_no", sfzh);//构造商户配置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.domerchantConfigObj.put("return_url", "alipays://platformapi/startapp?appId=20000067&url=https%3A%2F%2Fapp.cqkqinfo.com%2Fcertify%2FzmxyBackNew.do");//构造身份认证初始化服务业务参数数据JSONObject bizContentObj = new JSONObject();//商户请求的唯一标识,推荐为uuid,必填String uuid = UUID.randomUUID().toString();bizContentObj.put("outer_order_no", uuid);bizContentObj.put("biz_code", "FACE");bizContentObj.put("identity_param", identityObj);bizContentObj.put("merchant_config", merchantConfigObj);request.setBizContent(bizContentObj.toString());//发起请求AlipayUserCertifyOpenInitializeResponse response = alipayClient.execute(request);String url = "";if (response.isSuccess()) {System.out.println("调用成功");//接口调用成功,从返回对象中获取certify_idString certifyId = response.getCertifyId();url = url(certifyId);//执行后续流程...map.put("certifyId", certifyId);map.put("url", url);if (certifyId != null && url != null) {map.put("success", "2");} else {map.put("success", "3");}} else {System.out.println("调用失败");}return map;} else {map.put("success", "1");NDShenPi ndShenPi = sfrz.getselect(sfzh, xm);System.err.println("ndShenPi:" + ndShenPi);if (ndShenPi != null) {map.put("id", String.valueOf(ndShenPi.getId()));map.put("BillNo", ndShenPi.getBillNo());map.put("OID", String.valueOf(ndShenPi.getOID()));map.put("ShiXiangMingCheng", ndShenPi.getShiXiangMingCheng());map.put("ShiXiangLeiXing", ndShenPi.getShiXiangLeiXing());map.put("ShouLiShiXian", ndShenPi.getShouLiShiXian());map.put("ShiXiangBianMa", ndShenPi.getShiXiangBianMa());map.put("ShouLiBuMen", ndShenPi.getShouLiBuMen());map.put("ShouLiChuangKou", ndShenPi.getShouLiChuangKou());map.put("ShouLiShiJian", ndShenPi.getShouLiShiJian());map.put("ShenQingRen", ndShenPi.getShenQingRen());map.put("ShenQingRenEN", ndShenPi.getShenQingRenEN());map.put("ZhengJianType", ndShenPi.getZhengJianType());map.put("ZhengJianHao", ndShenPi.getZhengJianHao());map.put("Img", ndShenPi.getImg());map.put("ShengRi", ndShenPi.getShengRi());map.put("XingBie", ndShenPi.getXingBie());map.put("MinZu", ndShenPi.getMinZu());map.put("GuoJia", ndShenPi.getGuoJia());map.put("HuKouSuoZaiDi", ndShenPi.getHuKouSuoZaiDi());map.put("XueLi", ndShenPi.getXueLi());map.put("XueLiQuanRiZhi", ndShenPi.getXueLiQuanRiZhi());map.put("QuanRiZhiZhuanYe", ndShenPi.getQuanRiZhiZhuanYe());map.put("HaiWai", ndShenPi.getHaiWai());map.put("XueLiZaiZhi", ndShenPi.getXueLiZaiZhi());map.put("ZaiZhiZhuanYe", ndShenPi.getZaiZhiZhuanYe());map.put("RenCaiLeiBie", ndShenPi.getRenCaiLeiBie());map.put("RenCaiChengHao", ndShenPi.getRenCaiChengHao());map.put("BiYeZhengShuBH", ndShenPi.getBiYeZhengShuBH());map.put("YJTime", ndShenPi.getYJTime());map.put("YouXiang", ndShenPi.getYouXiang());map.put("DianHua", ndShenPi.getDianHua());map.put("ShouJi", ndShenPi.getShouJi());map.put("YuanDanWei", ndShenPi.getYuanDanWei());map.put("YuanZhiCheng", ndShenPi.getYuanZhiCheng());map.put("YinJinLeiXing", ndShenPi.getYinJinLeiXing());map.put("QianYueQiXian", ndShenPi.getQianYueQiXian());map.put("ZhiCheng", ndShenPi.getZhiCheng());map.put("DanWei", ndShenPi.getDanWei());map.put("DiZhiQu", ndShenPi.getDiZhiQu());map.put("DiZhi", ndShenPi.getDiZhi());map.put("HangYe", ndShenPi.getHangYe());map.put("XingZhi", ndShenPi.getXingZhi());map.put("ShengZhi", ndShenPi.getShengZhi());map.put("FaRen", ndShenPi.getFaRen());map.put("LianXiRen", ndShenPi.getLianXiRen());map.put("LianXiDianHua", ndShenPi.getLianXiDianHua());map.put("GZShiJian", ndShenPi.getGZShiJian());map.put("GZGongZuo", ndShenPi.getGZGongZuo());map.put("GZZhiWu", ndShenPi.getGZZhiWu());map.put("JLMingCheng", ndShenPi.getJLMingCheng());map.put("JLShiJian", ndShenPi.getJLShiJian());map.put("JLBuMen", ndShenPi.getJLBuMen());map.put("QXingMing", ndShenPi.getQXingMing());map.put("QZhengHao", ndShenPi.getQZhengHao());map.put("QXingBie", ndShenPi.getQXingBie());map.put("QGuanXi", ndShenPi.getQGuanXi());map.put("QMingZu", ndShenPi.getQMingZu());map.put("QShengRi", ndShenPi.getQShengRi());map.put("QZhiWu", ndShenPi.getQZhiWu());map.put("QHuKouDiZhi", ndShenPi.getQHuKouDiZhi());map.put("QHuKou", ndShenPi.getQHuKou());map.put("YuanHuKou", ndShenPi.getYuanHuKou());map.put("YuanHuKouDiZhi", ndShenPi.getYuanHuKouDiZhi());map.put("HuKou", ndShenPi.getHuKou());map.put("HuKouDiZhi", ndShenPi.getHuKouDiZhi());map.put("GuestNo", ndShenPi.getGuestNo());map.put("GuestName", ndShenPi.getGuestName());map.put("BeiZhu", ndShenPi.getBeiZhu());map.put("ShouLiTiaoJian", ndShenPi.getShouLiTiaoJian());map.put("ShenQingShiJian", ndShenPi.getShenQingShiJian());map.put("Type", ndShenPi.getType());map.put("FromTo", ndShenPi.getFromTo());map.put("YuShenTxt", ndShenPi.getYuShenTxt());map.put("YuShenTime", ndShenPi.getYuShenTime());map.put("YuShenRen", ndShenPi.getYuShenRen());map.put("YuShenAccount", ndShenPi.getYuShenAccount());map.put("PJQStar", ndShenPi.getPJQStar());map.put("SmsNote", ndShenPi.getSmsNote());map.put("PJQMsg", ndShenPi.getPJQMsg());map.put("CardNo", ndShenPi.getCardNo());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");if (ndShenPi.getCardDate() == null) {map.put("CardDate", null);} else {map.put("CardDate", sdf.format(ndShenPi.getCardDate()));}if (ndShenPi.getCardDateDQ() == null) {map.put("CardDateDQ", null);} else {map.put("CardDateDQ", sdf.format(ndShenPi.getCardDateDQ()));}if (ndShenPi.getCardFiveDQTime() == null) {map.put("CardFiveDQTime", null);} else {map.put("CardFiveDQTime", sdf.format(ndShenPi.getCardFiveDQTime()));}map.put("CardState", String.valueOf(ndShenPi.getCardState()));map.put("CardType", String.valueOf(ndShenPi.getCardType()));if (ndShenPi.getCardZKDate() == null) {map.put("CardZKDate", null);} else {map.put("CardZKDate", sdf.format(ndShenPi.getCardZKDate()));}map.put("CardSerial", ndShenPi.getCardSerial());map.put("RenCaiFlg", String.valueOf(ndShenPi.getRenCaiFlg()));map.put("RenCaiFlgContent", ndShenPi.getRenCaiFlgContent());map.put("CardTypeS", ndShenPi.getCardTypeS());if (ndShenPi.getRenCaiZXTime() == null) {map.put("RenCaiZXTime", null);} else {map.put("RenCaiZXTime", sdf.format(ndShenPi.getRenCaiZXTime()));}if (ndShenPi.getFuShenTime() == null) {map.put("FuShenTime", null);} else {map.put("FuShenTime", sdf.format(ndShenPi.getFuShenTime()));}if (ndShenPi.getAddTime() == null) {map.put("AddTime", null);} else {map.put("AddTime", sdf.format(ndShenPi.getAddTime()));}map.put("cardcode", ndShenPi.getCardcode());map.put("zzmm", ndShenPi.getZzmm());map.put("FuShen", ndShenPi.getFuShen());} else {map.put("success", "4");}return map;}}
响应结果:
{"alipay_user_certify_open_initialize_response": {"code": "10000","msg": "Success","certify_id": "2109b5e671aa3ff2eb4851816c65828f"},"sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}
会生成一个 certify_id,根据这个id去拉取身份认证页面
public String url(String certifyId) throws AlipayApiException {//参考代码如下://获取alipay clientAlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);AlipayUserCertifyOpenCertifyRequest request = new AlipayUserCertifyOpenCertifyRequest();//设置certifyIdJSONObject bizContentObj = new JSONObject();bizContentObj.put("certify_id", certifyId);request.setBizContent(bizContentObj.toString());//生成请求链接,这里一定要使用GET模式AlipayUserCertifyOpenCertifyResponse response = alipayClient.pageExecute(request, "GET");String certifyUrl = "";if (response.isSuccess()) {System.out.println("开始认证服务调用成功");certifyUrl = response.getBody();System.err.println("certifyUrl:" + certifyUrl);//执行后续流程...//} else {System.out.println("调用失败");}return certifyUrl;}
响应结果:
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×tamp=2016-11-25+15%3A00%3A59&version=1.0&sign=MhtfosO8AKbwctDgfGitzLvhbcvi%2FMv3iBES7fRnIXn%2BHcdwq9UWltTs6mEvjk2UoHdLoFrvcSJipiE3sL8kdJMd51t87vcwPCfk7BA5KPwa4%2B1IYzYaK6WwbqOoQB%2FqiJVfni602HiE%2BZAomW7WA3Tjhjy3D%2B9xrLFCipiroDQ%3D
然后去那这个地址去拉取身份验证页面:
要使用小程序接入身份验证功能,唤起身份验证示例代码如下:/*** 唤起认证流程* 参数: certifyId、url 需要通过支付宝 openapi 开放平台网关接口获取* 详细说明可查看文档下方的参数说明**/my.startAPVerify({url: '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×tamp=2020-05-28+18%3A12%3A04&version=1.0',
certifyId: "your_certifyId",
success: function (res) {console.log('success', res)
},
fail: function (res) {console.log('fail', res)
},
complete: function (res) {console.log('complete', res)
}
})
基本完成以上功能,不清楚的请留言咨询谢谢!!!
支付宝小程序身份认证(拉取人脸识别 认证功能 +详细案例)相关推荐
- 小程序切换账户拉取仓库文件的appid提示
小程序切换账户拉取仓库文件,拉取后appid会提示项目不是当前appid的项目,因为切换了账户,而每个小程序账户只有一个appid,所以会冲突 去project.config.json里吧appid改 ...
- 关于微信小程序流量主拉取视频显示暂无广告
出现这种情况分2中情况 1.代码问题 2.因为小程序广告组件在审核中,因此在开发版本中就会出现暂无广告.线上版本啥也会没有,等到审核通过了,就可以显示视频广告了
- 代驾微信小程序现成开发,代驾司机用户端功能详细介绍
代驾微信小程序现成开发制作解决方案: 微信代驾小程序开发制作功能详细介绍: (一)管理后台功能 概述:总交易额.总交易数.昨日交易额.昨日交易数.昨日司机申请数量.营业额统计看板aigao0607 基 ...
- 轻栈送上免费注册支付宝小程序
你可能注意到了,除了微信小程序之外,小程序还有支付宝.百度.今日头条.抖音等.这些互联网产品纷纷推出自己的小程序. 之前说了那么多的微信小程序,是时候说一下支付宝小程序了. 你应该没想到,支付宝小程序 ...
- 微信小程序微信公众号支付宝小程序H5(获取信息用户信息,支付,分享,人脸识别)
文章目录 一.微信小程序 1. 获取信息用户信息 2.支付 3.分享 4. 腾讯云小程序人脸核身 二.微信公众号 1.获取信息用户信息 2.支付 3. 分享(普通分享) 4.分享(vue单页面 配置分 ...
- 微信小程序公众号支付宝小程序的登录授权、支付、分享、人脸识别人脸核身
文章目录 一.微信小程序 1. 获取信息用户信息 2.支付 3.分享 4. 腾讯云小程序人脸核身 二.微信公众号 1.获取信息用户信息 2.支付 3. 分享(普通分享) 4.分享(vue单页面 配置分 ...
- 支付宝小程序获取用户授权并进行认证登录流程(前端)
1.支付宝小程序获取用户授权并进行认证登录流程 1.1申请获取用户信息能力 登录功能做之前要先沟通好客户的需求,支付宝小程序获取用户授权调用相应的接口之前要先获得对应的能力.如果需要获取身份证 ...
- php 支付宝小程序授权登陆验签_星巴克“啡快”登陆支付宝小程序,让你“飞快”取到咖啡...
当代年轻人的生活方式是怎样的? 靠地铁通勤,靠咖啡续命 早上睁不开眼,咖啡来一杯 中午昏昏欲睡,咖啡来一杯 晚上熬夜加班,咖啡来一杯 喝完这杯,还有一杯 "宁可食无肉,不可早无星" ...
- 安卓小程序 自定义下拉刷新_支付宝小程序设计设计指南
本篇<设计指南>从7个维度分析: 导航(架构清晰,指引明确).界面(明辨主次,重点明确).流程(流程明确,避免打扰).引导(操作向导,降低成本).反馈(反馈及时,减少焦虑).容错(用户可控 ...
最新文章
- Oracle体系结构中的各种名称
- Linux驱动程序中的file,inode,file_operations三大结构体
- 终于收到为广州.NET俱乐部活动准备的礼品了:)
- python网课期中答案_中国大学python编程答案网课MOOC考试期末慕课答案
- [转] PHP 转义与反转义函数
- Linux下通过 rm -f 删除大量文件时报错:Argument list too long
- yii2 batchInsert批量插入
- SuperMap许可驱动安装流程详解
- 民生银行计算机研发笔试题,民生银行提前批 “民芯计划” 技术岗笔试算法题...
- 线性函数、非线性函数与线性回归的区别
- ERNIE: Enhanced Language Representation with Informative Entities
- 【H3C模拟器】基于端口VLAN的交换机配置实验(同一vlan互通)
- 如何采集与分析RocketMQ客户端日志
- 5G消息、聊天机器人和小程序
- Microsoft Visual Studio 2019正式版离线安装包下载
- python爬虫初试-下载LOL全英雄皮肤
- 离职员工住房公积金提取办法(深圳)
- 游戏设计艺术学习笔记之——第一章 太初之始,有设计师
- mui框架scroll,鼠标滑轮可以滚动,移动端触摸无法滚动
- 模板脚手架资质怎么办理
热门文章
- java即时编译器_即时编译器 (JIT) 详解
- 今日金融词汇---BP
- MATLAB||清除指令clear,clear all,clc,clf,cla
- Netty - 探究PageCache磁盘高速缓存
- 朱有鹏:对嵌入式工程师的一些小建议
- windows下安装masscan
- 线段树的进阶:多种信息的维护与传递
- Altium Designer调整PCB丝印位号经验
- 东北大学计算机考研历年分数线,东北大学历年考研复试分数线_2018考研分数线...
- SpringAOP实现多数据源切换