支付宝实名认证
实名认证后台服务主要涉及两个接口:人脸核身初始化接口、人脸核身结果查询接口
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.*;
import com.alipay.api.domain.DatadigitalFincloudGeneralsaasFaceVerificationInitializeModel;
import com.alipay.api.domain.DatadigitalFincloudGeneralsaasFaceVerificationQueryModel;
import com.alipay.api.request.DatadigitalFincloudGeneralsaasFaceVerificationInitializeRequest;
import com.alipay.api.request.DatadigitalFincloudGeneralsaasFaceVerificationQueryRequest;
import com.alipay.api.response.DatadigitalFincloudGeneralsaasFaceVerificationInitializeResponse;
import com.alipay.api.response.DatadigitalFincloudGeneralsaasFaceVerificationQueryResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.UUID;/*** 支付宝实名认证服务** @Author zwm* @Date 2025-01-06*/@Service
@Slf4j
public class AlipayRealNameAuthServiceImpl implements RealNameAuthService {@Autowiredprivate AliyunProperties aliyunAuthProperties;@Autowiredprivate CustomerMapper customerMapper;@Autowiredprivate CustomerAuthService customerAuthService;@Autowiredprivate CustomerCacheService customerCacheService;// 支付宝接口返回结果keyprivate static String ALIPAY_AUTH_QUERY_RESPONSE = "datadigital_fincloud_generalsaas_face_verification_query_response";private static String ALIPAY_AUTH_INITIALIZE_RESPONSE = "datadigital_fincloud_generalsaas_face_verification_initialize_response";/*** 人脸核身初始化接口** @return 前端刷脸url以及certify_id(查询接口需要用到)*/@Overridepublic JSONObject authInitialize(RealNameCertify certify) throws Exception {String outerOrderNo = "xxx_" + UUID.randomUUID().toString();log.info("auth info:idCard:{},name:{},outerOrderNo:{}", certify.getCertNo(), certify.getCertName(), outerOrderNo);// 初始化SDKAlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());// 构造请求参数以调用接口DatadigitalFincloudGeneralsaasFaceVerificationInitializeRequest request = new DatadigitalFincloudGeneralsaasFaceVerificationInitializeRequest();DatadigitalFincloudGeneralsaasFaceVerificationInitializeModel model = new DatadigitalFincloudGeneralsaasFaceVerificationInitializeModel();// 设置商户请求的唯一标识model.setOuterOrderNo(outerOrderNo);// 设置人脸核身具体类型目前仅支持model.setBizCode("DATA_DIGITAL_BIZ_CODE_FACE_VERIFICATION");// 设置认证类型model.setIdentityType("CERT_INFO");// 设置证件类型model.setCertType("IDENTITY_CARD");// 设置真实姓名model.setCertName(certify.getCertName());// 设置证件号model.setCertNo(certify.getCertNo());request.setBizModel(model);// 需要使用对称加密算法request.setNeedEncrypt(true);DatadigitalFincloudGeneralsaasFaceVerificationInitializeResponse response = alipayClient.certificateExecute(request);System.out.println(response.getBody());JSONObject resultJson = JSONObject.parseObject(response.getBody());JSONObject responseResult = resultJson.getJSONObject(ALIPAY_AUTH_INITIALIZE_RESPONSE);log.info("【人脸核身初始化接口】返回:{}", responseResult);return responseResult;}/*** 人脸核身结果查询接口* <p>** @param certifyId* @return* @throws Exception*/@Overridepublic JSONObject queryCertifyResult(String certifyId) throws Exception {// 初始化SDKAlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());// 构造请求参数以调用接口DatadigitalFincloudGeneralsaasFaceVerificationQueryRequest request = new DatadigitalFincloudGeneralsaasFaceVerificationQueryRequest();DatadigitalFincloudGeneralsaasFaceVerificationQueryModel model = new DatadigitalFincloudGeneralsaasFaceVerificationQueryModel();// 设置填入人脸核身初始化阶段获取到的certify_idmodel.setCertifyId(certifyId);// 设置是否需要返回活体结果图片model.setNeedAlivePhoto("N");request.setBizModel(model);DatadigitalFincloudGeneralsaasFaceVerificationQueryResponse response = alipayClient.certificateExecute(request);System.out.println(response.getBody());JSONObject resultJson = JSONObject.parseObject(response.getBody());JSONObject responseResult = resultJson.getJSONObject(ALIPAY_AUTH_QUERY_RESPONSE);log.info("【人脸核身结果查询接口】返回:{}", responseResult);return responseResult;}private AlipayConfig getAlipayConfig() throws Exception {String privateKey = aliyunAuthProperties.getAuth().getAppPrivateKey();AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setServerUrl(aliyunAuthProperties.getAuth().getServerUrl());// appIdalipayConfig.setAppId(aliyunAuthProperties.getAuth().getAppId());alipayConfig.setPrivateKey(privateKey);alipayConfig.setFormat("json");// 密钥模式下采用此方法//alipayConfig.setAlipayPublicKey(alipayPublicKey);//设置应用公钥证书路径alipayConfig.setAppCertPath(getFilePath(aliyunAuthProperties.getAuth().getAppCertFileName()));//设置支付宝公钥证书路径alipayConfig.setAlipayPublicCertPath(getFilePath(aliyunAuthProperties.getAuth().getAlipayCertFileName()));//设置支付宝根证书路径alipayConfig.setRootCertPath(getFilePath(aliyunAuthProperties.getAuth().getAlipayRootCertFileName()));alipayConfig.setCharset("UTF-8");alipayConfig.setSignType("RSA2");alipayConfig.setEncryptType(aliyunAuthProperties.getAuth().getEncryptType());alipayConfig.setEncryptKey(aliyunAuthProperties.getAuth().getEncryptKey());return alipayConfig;}/*** 获取资源文件路径** @param fileName* @return*/public String getFilePath(String fileName) {String relativePath = "/cert/" + fileName;log.info("relativePath:{}", relativePath);String[] split = fileName.split("\\.");try {// 使用当前类来获取资源文件的输入流InputStream inputStream = AlipayRealNameAuthServiceImpl.class.getResourceAsStream(relativePath);if (inputStream == null) {throw new IOException("File " + relativePath + " does not exist");}// 将输入流中的内容复制到临时文件Path tempFilePath = Files.createTempFile(split[0], split[1]);Files.copy(inputStream, tempFilePath, StandardCopyOption.REPLACE_EXISTING);return tempFilePath.toString();} catch (IOException e) {e.printStackTrace();}return null;}
}
POM文件
<!--支付宝实名认证--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.38.61.ALL</version></dependency>
相关文章:
支付宝实名认证
实名认证后台服务主要涉及两个接口:人脸核身初始化接口、人脸核身结果查询接口 import com.alibaba.fastjson.JSONObject; import com.alipay.api.*; import com.alipay.api.domain.DatadigitalFincloudGeneralsaasFaceVerificationInitializeModel; import com.ali…...
GO随想:GO的并发等待
协程并发等待技术——WaitGroup 类型和 errgroup 包 waitgroup 阻塞等待多个并发任务执行完成。WaitGroup 类型主要包含下面几个方法。 func (wg *WaitGroup) Add(delta int) func (wg *WaitGroup) Done() func (wg *WaitGroup) Wait() 第一个是 Add 方法,在任务运…...
kubernetes第五天
1.容器的健康检查Probe(探针)之readinessProbe就绪探针 1.exec方式检查 #通过rc资源创建了三个pod,然后使用services资源,对外提供三个pod的容器的访问入口。 apiVersion: v1 kind: ReplicationController metadata:name: web-rc-readlinepr…...
扩散模型论文概述(三):Stability AI系列工作【学习笔记】
视频链接:扩散模型论文概述(三):Stability AI系列工作_哔哩哔哩_bilibili 本期视频讲的是Stability AI在图像生成的工作。 同样,第一张图片是神作,总结的太好了! 介绍Stable Diffusion之前&…...
JVM调优,参数在哪里设置的?
JVM调优,参数在哪里设置的? 在Java应用程序中,JVM(Java Virtual Machine)的调优通常通过设置JVM启动参数来实现。这些参数可以控制JVM的内存分配、垃圾回收策略、线程管理、性能优化等方面。 1. JVM参数的位置 JVM参…...
2024年最新Stable Diffusion 新手入门教程,安装使用及模型下载
一、安装要求: ① 操作系统:Windows10以后的系统 ② CPU:不做强制性要求 ③ 内存:推荐8G以上 ④ 显卡:必须是Nvidia的独立显卡,显存最低4G,推荐20系以后;A卡、核显只能用CPU跑 …...
Ubuntu 20.04安装gcc
一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…...
IT运维的365天--024 闲置路由器关闭了dhcp,如何知道它的IP是啥
有时候各种原因,我们关闭了路由器的Dhcp,比如需要获取的无线IP和有线同一个网段的情况。时间久了,如果没做标记,大部分时候就会忘了路由器原来设置的是什么IP,没有路由器的对应IP,自然也无法进路由器后台去…...
kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration
1.引言 作为一名(坦白说有点懒的)图像处理方向的研究生,说实话最近新开一个坑,可能是因为要寒假了比较无聊,这次带来的系列是kaggle数据处理竞赛的经典例题:纽约出租车行程时间问题。希望大家多多支持&…...
Freemarker模板进行判空
文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中,你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...
C++ const关键字(八股总结)
作用 const修饰符用来定义常量,具有不可变性。 修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer&…...
Linux 清楚历史命令
在 Linux 中,执行完命令后,如果你想清除终端屏幕上的内容,可以使用以下几种方法: 1. 使用 clear 命令 clear 是 Linux 中最常用的清除屏幕命令。它会将终端屏幕清空,并将光标移动到屏幕左上角。 bash clear 2. 使用快…...
服务器双网卡NCCL通过交换机通信
1、NCCL变量设置 export CUDA_DEVICE_MAX_CONNECTIONS1 export NCCL_SOCKET_IFNAMEeno2 export NCCL_IB_DISABLE0 #export NCCL_NETIB export NCCL_IB_HCAmlx5_0,mlx5_1 export NCCL_IB_GID_INDEX3 export NCCL_DEBUGINFOGPUS_PER_NODE4MASTER_ADDR192.168.1.2 MASTER_PORT600…...
Redis哨兵(sentinel)
是什么 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 哨兵的作用 1、监控redis运行状态,包括master和slave 2、当master down机,能自动将slave切换成新master 能干嘛…...
小白学Pytorch
小白学Pytorch 发现一个比较好的教程,对于自己来说比较合适,适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚: 我们使用nn包中的Sequential搭建网络&#…...
ros2笔记-2.5.3 多线程与回调函数
本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件,learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程:{threading.get_ident()} 开始下载:{…...
第5章:Go语言错误处理和异常
第5章:Go语言错误处理和异常 5.1 错误类型基础 5.1.1 error接口 // error接口定义 type error interface {Error() string }// 自定义错误 type CustomError struct {Message stringCode int }func (e *CustomError) Error() string {return fmt.Sprintf(&quo…...
题库刷题知识点总结
算法与机器学习相关 支持向量机:是一种有监督的机器学习算法,用于分类和回归任务。它通过寻找一个最优超平面来将不同类别的数据点分开,最大化两类数据点到超平面的间隔,具有良好的泛化能力和抗噪声能力。机器学习:是…...
GraphRAG:LLM之Graphrag接入milvus
前言 微软目前的graphrag更像个demo,数据量大的时候不是很友好的啊,所以将milvus接入了graphrag,看完这篇文章,其他数据库接入应该也没问题 注:这篇文章只是在search的时候接入进来,index过程或者说整个流…...
adb使用及常用命令
目录 介绍 组成 启用adb调试 常用命令 连接设备 版本信息 安装应用 卸载应用 文件操作 日志查看 屏幕截图和录制 设备重启 端口转发 调试相关 设置属性 设备信息查询 获取帮助 模拟输入 介绍 adb全称为 Android Debug Bridge(Android调试桥),是 A…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
