帝国cms接入腾讯云人脸识别认证代码

利用帝国cms在做一些会员系统的时候,需要做人脸识别认证,之前接入了某api接口,发现身份证识别率真的低,还好充值的少,否则要出问题,后来发现会员注册率降低了不少,最终还是决定使用腾讯云的人脸识别,虽然费用高一点点,但是人脸识别率高,数据反馈很快。
其中的index.php是执行文件,ecms.php是操作文件,notify.php是数据毁掉文件,代码其实很少,在微信中访问直接跳转到腾讯云的人脸识别,然后自动返回把相应的数据写进数据库,我这里很简单,先进行认证后对数据库的身份进行对比,是否认证过,还会清理之前点击认证最后没有认证完的数据,最大限度的情理无用的信息。
if($enews=='gofaceid') {//判断该用户是否认证过$del=$empire->query("delete from {$dbtbpre}member_verify where userid='$user[userid]';");//先删除以前的class Face {const SecretId = "apiid";const SecretKey = "apikey";const Url = "https://faceid.tencentcloudapi.com";//算法const Algo = "sha256";//规范请求串const HTTPRequestMethod = "POST";const CanonicalURI = "/";const CanonicalQueryString = "";const CanonicalHeaders = "content-type:application/json; charset=utf-8\nhost:faceid.tencentcloudapi.com\n";const SignedHeaders = "content-type;host";//参与签名的头部信息//签名字符串const Algorithm = "TC3-HMAC-SHA256";const Service = "faceid";const Stop = "tc3_request";/*** 实名核身鉴权*/public function getDetectAuth() {$param = ['RuleId' => "1",//用于细分客户使用场景,申请开通服务后,可以在腾讯云慧眼人脸核身控制台(https://console.cloud.tencent.com/faceid) 自助接入里面创建,审核通过后即可调用'RedirectUrl' => "跳转地址",//用于细分客户使用场景,申请开通服务后,可以在腾讯云慧眼人脸核身控制台(https://console.cloud.tencent.com/faceid) 自助接入里面创建,审核通过后即可调用];return self::getCommonPostRequest("DetectAuth", $param);}/*** 鉴权* @param string $action 方法* @param array $param 参数* @param string $version 版本号* @return array*/private static function getCommonPostRequest($action, array $param = [], $version = "2018-03-01") {//时间戳$timeStamp = time();//$timeStamp = 1586333773;//参数转化Json$paramJson = json_encode($param);//规范请求串$hashedRequestPayload = self::HashEncryption($paramJson);$canonicalRequest = self::HTTPRequestMethod . "\n" .self::CanonicalURI . "\n" .self::CanonicalQueryString . "\n" .self::CanonicalHeaders . "\n" .self::SignedHeaders . "\n" .$hashedRequestPayload;//签名字符串$date = gmdate("Y-m-d", $timeStamp);//UTC 0时区的值$credentialScope = $date . "/" . self::Service . "/" . self::Stop;$hashedCanonicalRequest = self::HashEncryption($canonicalRequest);$stringToSign = self::Algorithm . "\n" .$timeStamp . "\n" .$credentialScope . "\n" .$hashedCanonicalRequest;//计算签名$secretDate = self::HashHmacSha256Encryption($date, 'TC3' . self::SecretKey);$secretService = self::HashHmacSha256Encryption(self::Service, $secretDate);$secretSigning = self::HashHmacSha256Encryption(self::Stop, $secretService);//签名$signature = self::HashHmacSha256Encryption($stringToSign, $secretSigning, false);// echo $signature . " \n";$authorization = self::Algorithm . ' ' .'Credential=' . self::SecretId . '/' . $credentialScope . ', ' .'SignedHeaders=' . self::SignedHeaders . ', ' .'Signature=' . $signature;//Header头部$headers = ["Authorization: $authorization","Host: faceid.tencentcloudapi.com","Content-Type: application/json; charset=utf-8","X-TC-Action: $action","X-TC-Version: $version","X-TC-Timestamp: $timeStamp","X-TC-Region: ap-beijing"];//请求$response = self::get_curl_request(self::Url, $paramJson, self::HTTPRequestMethod, $headers);echo($paramJson);//解析if (!$response) {return ['code' => 0, 'codeError' => '1002', 'msg' => 'Interface request failed'];}$response = json_decode($response, true);if (!isset($response['Response'])) {return ['code' => 0, 'codeError' => '1003', 'msg' => 'Response error'];}if (isset($response['Response']['Error'])) {return ['code' => 0, 'codeError' => $response['Response']['Error']['Code'], 'msg' => $response['Response']['Error']['Message'], 'RequestId' => $response['Response']['RequestId']];} else {return ['code' => 1, 'msg' => 'ok', 'data' => $response['Response']];}}private static function HashEncryption($sign) {return strtolower(hash(self::Algo, $sign));}private static function HashHmacSha256Encryption($sign, $key, $flag = true) {return hash_hmac(self::Algo, $sign, $key, $flag);}/*** @param $url* @param array $param* @param string $mothod* @param array $headers* @param int $return_status* @param int $flag* @return array|bool|string*/public static function get_curl_request($url, $param = [], $mothod = 'POST', $headers = [], $return_status = 0, $flag = 0) {$ch = curl_init();if (!$flag) {curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);}curl_setopt($ch, CURLOPT_TIMEOUT, 6);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);if (strtolower($mothod) == 'post') {curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $param);} else {$url = $url . "?" . http_build_query($param);}curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 2);curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);#curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1");//代理服务器地址#curl_setopt($ch, CURLOPT_PROXYPORT, 12639);//代理服务器端口$ret = curl_exec($ch);$code = curl_getinfo($ch);curl_close($ch);if ($return_status == "1") {return array($ret, $code);}return $ret;}}//执行$model = new Face();$response = $model->getDetectAuth();// 认证前写进数据库// 相应信息$requestId = $response["data"]["RequestId"];$bizToken = $response["data"]["BizToken"];// 假设BizToken存在于data中$starttime=time();$certifyip=egetip();$empire->query("insert into {$dbtbpre}member_verify(userid,username,starttime,verifyip,BizToken,RequestId) values('$user[userid]','$name','$starttime','$certifyip','$bizToken','$requestId');");// 然后您可以根据需要使用这些值,比如打印出来// echo "RequestId: " . $requestId . "\n";// echo "BizToken: " . $bizToken . "\n";// if ($response["code"] == 1) {//获取到鉴权URL进行跳转$url = $response["data"]["Url"];// echo($url);//鉴权并且调用人脸核身header("Location: {$url}");} else {printerror2('数据错误','/e/member/cp/');}
}
这里同时还可以当用户注册人工之后,通知给管理员。
相关文章:
帝国cms接入腾讯云人脸识别认证代码
利用帝国cms在做一些会员系统的时候,需要做人脸识别认证,之前接入了某api接口,发现身份证识别率真的低,还好充值的少,否则要出问题,后来发现会员注册率降低了不少,最终还是决定使用腾讯云的人脸…...
计算机网络-OSI七层参考模型与数据封装
目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…...
[职场] 为什么不能加薪? #学习方法#知识分享#微信
为什么不能加薪? 不能加薪的根本原因,终于被我找到了! 朋友们!职场这个地方是个很神奇的世界,有些规则并不是你想象的那样。我们都希望能在这个世界里施展自己的才华,获得升职加薪的荣耀。然而,…...
[matlab]折线图之多条折线如何绘制实心圆作为标记点
使用MarkerFaceColor是标记点填充的颜色,b,表示blue,蓝色 plot(x, a, d--, MarkerFaceColor, b); % 绘制仿真结果的曲线如果一张图多条曲线那么每条曲线需要单独调用一次plot,每个plot间用hold on 连接 plot(x, a, d--, MarkerF…...
HTML:认识HTML与基本语法的学习
前言 HTML(超文本标记语言)是用于创建网页的标记语言,由一系列标签组成,定义网页中的元素。由蒂姆伯纳斯 - 李于1990年代初发明,最初用于科研机构间共享文档,迅速演变为Web开发基础。无论是电商、博客、新…...
如何掌握 Java 正则表达式 的基本语法及在 Java 中的应用
正则表达式是一种用于匹配字符串的模式,在许多编程语言中广泛使用。Java 正则表达式提供了强大的文本处理能力,能够对字符串进行查找、替换、分割等操作。 一、正则表达式的基本语法 正则表达式由普通字符和特殊字符组成。普通字符包括字母、数字和标点…...
深度学习(三)
5.Functional API 搭建神经网络模型 5.1利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom…...
文件系统小册(FusePosixK8s csi)【2 Posix标准】
文件系统小册(Fuse&Posix&K8s csi)【2 Posix】 往期文章:文件系统小册(Fuse&Posix&K8s csi)【1 Fuse】 POSIX:可移植操作系统接口(标准) 1 概念 POSIX:…...
vue 弹出框组件重复打开时,资源重新加载
新增或者编辑内容使用同一个弹出框,如何使数据可以重新加载? 1、绑定时间戳,有副作用,屏幕会闪烁一下 <el-dialog :key"timer" > </el-dialog> 2、v-if和:visible.sync同时使用 <el-dialogv-if"…...
图像的IO操作
代码: import cv2 as cvimport matplotlib.pyplot as plt#读取图像img cv.imread("../data/images/zidane.jpg")#显示图像#2.1 OpenCVcv.imshow("dili",img)cv.waitKey(0)cv.destroyAllWindows()#2.2 matplotlibplt.imshow(img[:,:,::-…...
关于 Vue.js 中`transition`组件使用:页面切换动画和标签移动动画都是要用到的
一、引言 在 Vue.js 中,transition组件提供了一种简单而强大的方式来实现页面过渡效果。它可以让元素在状态改变时,如进入或离开视图时,以平滑的动画方式进行过渡。通过transition,我们可以为应用增添更加生动和吸引人的用户体验…...
Flink Rest Basic Auth - 安全认证
背景 公司目前需要将Flink实时作业云化,构建多租户实时计算平台。目前考虑为了资源高效利用,并不打算为每个租户部署一套独立的Kubernetes集群。也就意味着多个租户的作业可能会运行在同一套kubernets集群中。此时实时作业的任务就变的很危险,因为网络可能是通的,就会存在…...
安全U盘和普通U盘有什么区别?
安全U盘(也称为加密U盘或安全闪存驱动器)与普通U盘肯定是有一些区别的,从字面意思上来看,就能看出,安全U盘是能够保护文件数据安全性的,普通U盘没这一些功能的,可随意拷贝文件,不防盗…...
大数据与数据科学的学科边界
大数据和数据科学是两个紧密相关但又不完全相同的学科。它们都关注数据的收集、管理、分析和解释,但侧重点有所不同。 大数据主要关注处理和分析大规模数据集的技术和方法。它涉及到数据存储、数据处理、数据挖掘、数据可视化和分布式计算等方面的技术。大数据的目…...
Chrome 源码阅读:跟踪一个鼠标事件的流程
我们通过在关键节点打断点的方式,去分析一个鼠标事件的流程。 我们知道chromium是多进程模型,那么,我们可以推测:一个鼠标消息先从主进程产生,再通过跨进程通信发送给渲染进程,渲染进程再发送给WebFrame&a…...
[C/C++]_[初级]_[在Windows和macOS平台上导出动态库的一些思考]
场景 最近看了《COM本质论》里关于如何设计基于抽象基类作为二进制接口,把编译器和链接器的实现隐藏在这个二进制接口中,从而使用该DLL时不需要重新编译。在编译出C接口时,发现接口名直接是函数名,比如BindNativePort,怎么不是_BindNativePort?说明 VC++导出的函数默认是使…...
MySQL排序操作
025排序操作 select .. from .. order by 字段 asc/descselect empno, ename, sal from emp order by sal asc;asc 不写的话,默认升序 多个字段排序 查询员工的编号、姓名、薪资,按照薪资升序排列,如果薪资相同的,再按照姓名升…...
问题:西周后期形成了能够传布四方、留存后世的兵书——著述年代最早的兵书——( )和( ). #媒体#知识分享
问题:西周后期形成了能够传布四方、留存后世的兵书——著述年代最早的兵书——( )和( ). A、《军志》 B、《军事》 C、《军政》 D、《孙子兵法》 参考答案如图所示...
kafka-消费者-指定offset消费(SpringBoot整合Kafka)
文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…...
JavaWeb2-Vue
Vue 前端框架,免除原生JS中的DOM操作简化书写 (以前学过又忘了,现在才知道原来vue是前端的) 基于MVVM思想(model-view -viewModel)实现数据双向绑定 model是数据模型 view负责数据展示 即DOM 中间这个负责…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
