帝国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 中间这个负责…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...