uniapp 实人认证

发布于:2024-06-23 ⋅ 阅读:(249) ⋅ 点赞:(0)

最下面有demo

首先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('veify');
	
	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>