支付宝实名认证
实名认证后台服务主要涉及两个接口:人脸核身初始化接口、人脸核身结果查询接口
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…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
