uniapp 实人认证

首先Dcloud创建云服务空间,开启一键登录并充值

下一步

1. 右键项目 》 创建uniCloud云开发环境 》右键uniCloud》关联云服务空间

2. cloudfunctions右键 新建云函数,任意命名(例:veify),然后右键项目》管理公告模块或扩展库依赖》选择

在这里插入图片描述

3.点击 云函数veify》目录下的 “ index.js ” 改名 “ index.obj.js ” 否则获取不到

3.1 index.obj.js 内代码如下
'use strict';
module.exports = {
    // __before调用其他方法前会先调用这个方法
    _before(context) {
        // 创建实人认证实例
        this.frvManager = uniCloud.getFacialRecognitionVerifyManager({
            requestId: this.getUniCloudRequestId()
        })
    },
    async getCertifyId({ realName, idCard, metaInfo }) {
        // 会先调用_before
        try {
            const result = await this.frvManager.getCertifyId({ realName, idCard, metaInfo });
            return result
        } catch (e) {
            throw { errCode: 500, message: '获取认证失败,请检查信息的正确性' };
        }
    },
      // 获取认证的结果
    async getAuthResult(certifyId) {
        try {
            const result = await this.frvManager.getAuthResult({ certifyId });
            return result
        } catch (e) {
            throw { errCode: 500, message: '认证失败' };
        }
    }
}

3.2 打包自定义包测试

4.在页面上获取云函数

// 注册实人认证
// veify为云函数文件名
	const uniCloudVerify = uniCloud.importObject('veify');

5,封装认证代码

//点击认证
submit(){
	let data = {
		realName:this.params.realName,
		idCard:this.params.idNumber
	}
	this.uniCloudVerifyFunction(data).then(res => {
		console.log('实名认证yes',res);
		if(res.authState == 'SUCCESS'){
			//成功
		}
		// 提示成功
	}).catch(err => {
		console.log('实名认证no',err);
		// 提示失败
	})
},
//封装
async uniCloudVerifyFunction({ realName, idCard }) {
	// 获取设备信息
	const metaInfo = uni.getFacialRecognitionMetaInfo();
    // 获取CertifyId
    const certifyidResult = await uniCloudVerify.getCertifyId({ realName, idCard, metaInfo }) 
	
    if (certifyidResult.errCode != 0) return Promise.reject({ code: 500, msg: '获取certifyid失败,请联系管理员处理!' })
    const certifyId = certifyidResult.certifyId;
    // 开始认证
	return new Promise((resolve, reject) => {
		uni.startFacialRecognitionVerify({
			certifyId: certifyId,
			success: async res => {
				console.log(res);
				const result = await uniCloudVerify.getAuthResult(certifyId);
				resolve(result);
			},
			fail: err => {
				
				reject({ code: err.errCode, msg: err.errMsg })
			}
		});
	})
}

完成

下面是我的demo,供参考

<template>
	<view>
		<view class="navBbutPart" >
			<button class="butsty font30" hover-class="butstyHover" 
				@click="$u.throttle(submit, 1000)"> 人脸验证 </button>
		</view>
	</view>
</template>

<script>
	import { accountAuthenticationedit,accountAuthenticationadd } from "@/api/all.js"
	// 注册实人认证
	const uniCloudVerify = uniCloud.importObject('getFaceRecognition');
	
	export default {
		name:"getBack",
		props:{
			params:{},
			//是否修改
			edit:{
				default:false
			}
		},
		data() {
			return {
				
			};
		},
		onLoad() {
			// console.log(uni.getFacialRecognitionMetaInfo());
		},
		methods:{
			async uniCloudVerifyFunction({ realName, idCard }) {
				// 获取设备信息
				const metaInfo = uni.getFacialRecognitionMetaInfo();
			    // 获取CertifyId
			    const certifyidResult = await uniCloudVerify.getCertifyId({ realName, idCard, metaInfo }) 
				
			    if (certifyidResult.errCode != 0) return Promise.reject({ code: 500, msg: '获取certifyid失败,请联系管理员处理!' })
			    const certifyId = certifyidResult.certifyId;
			    // 开始认证
				return new Promise((resolve, reject) => {
					uni.startFacialRecognitionVerify({
						certifyId: certifyId,
						success: async res => {
							console.log(res);
							const result = await uniCloudVerify.getAuthResult(certifyId);
							resolve(result);
						},
						fail: err => {
							
							reject({ code: err.errCode, msg: err.errMsg })
						}
					});
				})
			},
			submit(){
				let data = {
					realName:this.params.realName,
					idCard:this.params.idNumber
				}
				this.uniCloudVerifyFunction(data).then(res => {
					console.log('实名认证yes',res);
					if(res.authState == 'SUCCESS'){
						if(!this.edit){
							accountAuthenticationadd(this.params).then(resapi=>{
								console.log('实名认证接口',resapi);
								this.com.back()//返回
							})
						}else{
							accountAuthenticationedit(this.params).then(resapi=>{
								this.com.back()
							})
						}
					}
					// 提示成功
				}).catch(err => {
					console.log('实名认证no',err);
					// 提示失败
				})
			}
		}
	}
</script>

<style scoped lang="scss">
.navBbutPart{
	width: 90%;
	position: fixed;bottom: 200rpx;
	padding: 0 5%;
	button{
		border-radius: 50rpx;
	}

}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/727259.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

加密好的WPSword文档,忘记密码怎么办?

在日常办公和学习中&#xff0c;我们经常使用WPS Word等文档处理软件来创建和编辑重要文件。为了保护这些文件不被未经授权的人访问&#xff0c;我们通常会选择给文档设置密码。然而&#xff0c;有时我们可能会因为时间久远或其他原因而忘记自己设置的密码&#xff0c;这时该如…

IT运维全面数字化|芯片设计行业领跑打造运维流程闭环

在当今数字化转型的浪潮中&#xff0c;科技行业正经历着前所未有的变革。随着5G、人工智能、物联网等新兴技术的快速发展&#xff0c;企业对于高效、智能的运营模式的需求日益迫切。 芯片设计公司作为科技产业链中的关键一环&#xff0c;不仅要在技术创新上保持领先&#xff0…

javascript--类型检测 type of 和 instanceof

类型判断 1、typeof2、instanceof**instanceof 的原理** 3、constructor 1、typeof typeof在检测null、object、array、data的结果中都是object&#xff0c;所以无法用来区分这几个类型的区别。 <script>let a ["123",123,false,true,Symbol(1),new Date(),n…

双层循环和循环语句

echo 打印 echo -n 表示不换行输出 echo -e 表示输出转义字符 echo \b 相当于退格键&#xff08;backspace&#xff09; echo \n 换行&#xff0c;相当于回车 echo \f 换行&#xff0c;换行后的新行的开头连着上一行的行尾 echo \t 相当于tab健 &#xff08;…

Linux基础命令大全(详解版)

Linux基础命令&#xff08;详解版&#xff09; 文章目录 Linux基础命令&#xff08;详解版&#xff09;1.Linux的目录结构**2.Linux路径的描述方式**3.Linux命令基础格式4.ls命令 隐藏文件、文件夹5.pwd命令6.cd命令 特殊路径符7.mkdir命令 文件操作命令8.touch命令9.cat命令10…

DB9母头接口定义485

在通信技术中&#xff0c;DB9接口广泛应用于串行通信&#xff0c;尤其是在RS232和RS485标准中。虽然DB9接口最常见于RS232通信&#xff0c;但通过适当的引脚映射&#xff0c;它也可以用于RS485通信。本文将详细介绍如何定义和使用DB9母头接口进行RS485连接。 DB9母头接口简介 …

Ecahrts竖向柱状图实现自动滚动

效果如下&#xff1a; 1.首先声明一个timer定时器标识 let timer: NodeJS.Timer; // 定时器 2.再声明窗口展示的数量&#xff0c;yAxisIndex2用来记录当前index已经加了多少&#xff0c;方便再formatter中格式化标题的相关信息 const dataZoomEndValue 6; // 数据窗口范围的…

C语言程序设计-7 数组

在程序设计中&#xff0c;为了处理方便&#xff0c;把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在&#xff23;语言中&#xff0c;数组属于构造数据类型。一个数 组可以分解为多个数组元素&#xff0c;这些数组元素可以是基本数…

Hive笔记-3

3.2.2 查看表 1) 展示所有表 (1) 语法: 语法: SHOW TABLES [IN database_name] LIKE [identifier_with_wildcards]; In database_name 写的是查哪个数据库,一般不写默认是当前数据库 Like 后面跟通配符表达式 (2) 案例: 查看在 db_hive1 数据库里有没有以 stu 开头的表 …

DeviceNet总线粗缆和细缆连接器

DeviceNet总线粗缆和细缆连接器 DeviceNet的粗缆和细缆连接器是网络中不可或缺的部分&#xff0c;它们负责将不同的设备连接起来&#xff0c;实现数据的传输。粗缆通常用于主干线路&#xff0c;而细缆则用于分支线路。粗缆和细缆的芯位分布有所不同&#xff0c;粗缆通常有五个…

申办乙级资信证书,河南工程咨询单位流程详解

河南工程咨询单位申办乙级资信证书的流程详解如下&#xff1a; 一、前期准备阶段 研读政策文件&#xff1a; 研读《工程咨询行业管理办法》&#xff08;国家发展改革委2017年第9号令&#xff09;以及《国家发展改革委关于印发<工程咨询单位资信评价标准>的通知》&#x…

【嵌入式Linux】<总览> 文件IO(更新中)

文章目录 前言 一、常用函数 1. open函数 2. close函数 3. write函数 4. read函数 5. dup函数 6. dup2函数 二、文件读写细节 1. 换行符 2. 文件描述符 3. errno和perror 前言 在Linux系统中&#xff0c;一切皆文件。因此&#xff0c;掌握Linux下文件IO常用的函数…

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长&#xff0c;电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中&#xff0c;如何高效、准确地获取并分析数据&#xff0c;以洞察市场趋势、优化运营策略、提升用户体验&#xff0c;成为电商企业面临的重要挑…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

3D Web轻量化引擎HOOPS Commuicator是如何创建AEC查看器的?

在当今数字化时代&#xff0c;建筑、工程和施工&#xff08;AEC&#xff09;行业正经历着一场技术革命。HOOPS Communicator&#xff0c;一款基于HOOPS Web平台的3D Web轻量化引擎&#xff0c;正是这场革命的先锋之一。本文将探讨HOOPS Communicator是如何创建AEC查看器的&…

[论文笔记]Are Large Language Models All You Need for Task-Oriented Dialogue?

引言 今天带来论文Are Large Language Models All You Need for Task-Oriented Dialogue?的笔记。 主要评估了LLM在完成多轮对话任务以及同外部数据库进行交互的能力。在明确的信念状态跟踪方面&#xff0c;LLMs的表现不及专门的任务特定模型。然而&#xff0c;如果为它们提…

【Codesys】-计算开机通电运行时间,累计正常使用时间,故障停机时间

应客户要求&#xff0c;在程序添加了这个用来计算开机运行时间&#xff0c;原理就是取当前时间减去一开始记录的时间&#xff0c;没什么特别要求&#xff0c;记录一下使用的变量类型和数据写法&#xff0c;防止忘记了。 下文只写了一个开机通电运行时间的写法&#xff0c;累计…

解决navicat连接oracle19c数据库缺少oci.dll

下载oci.dll文件 搜索Oracle Instant Client Downloads Oracle Instant Client Downloads点击 Oracle Instant Client Downloads 超链接 根据自己的操作系统按需选择 以windows64位为例&#xff0c;下载 Version 19.23.0.0.0的OCI压缩包 解压到Navicat的安装根路径下&#xff…

红黑树(数据结构篇)

数据结构之红黑树 红黑树(RB-tree) 概念&#xff1a; 红黑树是AVL树的变种&#xff0c;它是每一个节点或者着成红色&#xff0c;或者着成黑色的一棵二叉查找树。对红黑树的操作在最坏情形下花费O(logN)时间&#xff0c;它的插入操作使用的是非递归形式实现红黑树的高度最多是…

视频融合共享平台LntonCVS视频监控安防系统运用多视频协议建设智慧园区方案

智慧园区&#xff0c;作为现代化城市发展的重要组成部分&#xff0c;不仅推动了产业的升级转型&#xff0c;也成为了智慧城市建设的核心力量。随着产业园区之间的竞争日益激烈&#xff0c;如何打造一个功能完善、智能化程度高的智慧园区&#xff0c;已经成为了业界广泛关注的焦…