帝國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/');}
}

這里同時還可以當用戶注冊人工之后,通知給管理員。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24153.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三十五篇:數字化轉型的引擎:賦能企業的ERP系統全景

數字化轉型的引擎:賦能企業的ERP系統全景 1. 引言 在這個快速變化的數字時代,現代企業面臨著前所未有的挑戰和機遇。企業資源計劃(ERP)系統,作為數字化轉型的核心,扮演著至關重要的角色。它不僅是企業運營…

第二十六章HTML與CSS書寫規范

1.HTML書寫規范 1.文檔類型聲明及編碼 統一為html5 聲明類型。編碼統一為utf-8。 2.頁面tdk TDK是一個縮寫&#xff0c;其中“T”表示為網頁定義標題&#xff0c;“D”表示為網頁定義描述 description&#xff0c;“K”表示為搜索引擎定義關鍵詞keywords。 1、<title&g…

NFT Insider #133:蘇富比將拍賣BAYC系列NFT,Taiko創世NFT系列已上線

引言&#xff1a;NFT Insider由NFT收藏組織WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;聯合出品&#xff0c;濃縮每周NFT新聞&#xff0c;為大家帶來關于NFT最全面、最新鮮…

立創·天空星開發板-GD32F407VE-EXTI

本文以 立創天空星開發板-GD32F407VET6-青春版 作為學習的板子&#xff0c;記錄學習筆記。 立創天空星開發板-GD32F407VE-EXTI 中斷硬件觸發中斷示例軟件觸發中斷示例 中斷 中斷分為內部中斷和外部中斷 外部中斷是由外部設備&#xff08;如按鍵、傳感器、通信接口等&#xff09…

rollup.js(入門篇)

前沿 Rollup 是一個用于 JavaScript 的模塊打包工具&#xff0c;它將小的代碼片段編譯成更大、更復雜的代碼&#xff0c;例如庫或應用程序。它使用 JavaScript 的 ES6 版本中包含的新標準化代碼模塊格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解決方案。ES 模塊允許…

如何在Python中處理時間和日期

在Python中處理時間和日期&#xff0c;我們通常使用內置的datetime模塊。這個模塊提供了類來操作日期和時間&#xff0c;包括date、time、datetime、timedelta以及tzinfo。以下是datetime模塊的一些基本用法&#xff1a; 1. 獲取當前日期和時間 python復制代碼 from datetime…

Linux編程for、while循環if判斷以及case語句用法

簡介 語法描述if條件語句if else條件判斷語句if else-if else多條件判斷語句for循環執行命令while循環執行命令until直到條件為真時停止循環case ... esac多選擇語句break跳出循環continue跳出當前循環 1. for 循環 for語句&#xff0c;定量循環&#xff0c;可以遍歷一個列表…

一文讀懂AI時代GPU的內存新寵-HBM

一文讀懂GPU最強輔助&#xff1a;HBM HBM&#xff0c;即高帶寬內存&#xff0c;是一項領先的3D堆疊DRAM技術&#xff0c;專為高性能計算和圖形處理單元&#xff08;GPU&#xff09;設計&#xff0c;滿足其對內存帶寬和容量的極致需求。該技術由AMD與海力士攜手研發&#xff0c;…

Apache安裝教程

目錄 一、Apache知識點 Apache服務簡介 Apache下載網址 Apache的主要特點 二、Apache服務的搭建 1. 關閉防火墻 2. 安裝依賴環境以及編譯工具 3. 將apache安裝包拖入xshell內 4. 解壓壓縮包 5. 進入httpd主包 6. 指定安裝路徑&#xff0c;啟用字符集支持等 7. 優化執…

重慶工商大學社會工作專業試題及答案,分享幾個實用搜題和學習工具 #媒體#學習方法#知識分享

搜題軟件一般都是通過識別題目內容搜索出問題的答案&#xff0c;當識別內容不正確或搜索不到答案時&#xff0c;又得重新到其他軟件進行重復的操作&#xff0c;很是麻煩。所以我們可以使用專業的識別工具&#xff0c;對題目內容進行識別&#xff0c;然后把提取出來的內容單獨保…

流量錄制學習

AREX Cloud | AREX (arextest.com) 流量錄制學習&#xff0c;比vivo的moonbox要好用

android 異屏同顯二.

android主屏: android副屏 | | mediaProjection ----SufaceTextrue ---Open…

【數據結構】平衡二叉樹左旋右旋與紅黑樹

平衡二叉樹左旋右旋與紅黑樹 平衡二叉樹 定義 平衡二叉樹是二叉搜索樹的一種特殊形式。二叉搜索樹&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一種具有以下性質的二叉樹&#xff1a; 對于樹中的每個節點&#xff0c;其左子樹中的所有節點都小于該節點的值…

【vector模擬實現】附加代碼講解

vector模擬實現 一、看源代碼簡單實現1. push_backcapacity&#xff08;容量&#xff09;sizereserve&#xff08;擴容&#xff09;operator[ ] &#xff08;元素訪問&#xff09; 2. pop_back3. itorator&#xff08;迭代器&#xff09;4.insert & erase &#xff08;頭插…

哈夫曼樹的創建

要了解哈夫曼樹&#xff0c;可以先了解一下哈夫曼編碼&#xff0c;假設我們有幾個字母&#xff0c;他們的出現頻率是A: 1 B: 2 C: 3 D: 4 E: 5 F: 6 G: 7。那么如果想要壓縮數據的同時讓訪問更加快捷&#xff0c;就要讓頻率高的字母離根節點比較進&#xff0c;容易訪問&#xf…

立創·天空星開發板-GD32F407VE-GPIO

本文以 立創天空星開發板-GD32F407VET6-青春版 作為學習的板子&#xff0c;記錄學習筆記。 立創天空星開發板-GD32F407VE-GPIO 基礎概念三極管MOS管 GPIO輸出模式輸出線與GPIO輸入模式GPIO點燈 基礎概念 GPIO&#xff0c;全稱為“通用輸入/輸出”&#xff08;General Purpose …

算法金 | 這次終于能把張量(Tensor)搞清楚了!

大俠幸會&#xff0c;在下全網同名[算法金] 0 基礎轉 AI 上岸&#xff0c;多個算法賽 Top [日更萬日&#xff0c;讓更多人享受智能樂趣] 1. 張量&#xff08;Tensor&#xff09;基礎概念 1.1 張量的定義與重要性 張量是深度學習中用于表示數據的核心結構&#xff0c;它可以視…

《帝國時代 III:決定版》秘籍 怎么在蘋果電腦上玩《帝國時代 III:決定版》

《帝國時代 III&#xff1a;決定版》是一款讓玩家沉浸于歷史長河體驗從大航海時代到工業革命時期的游戲。下面我們來看看《帝國時代 III&#xff1a;決定版》是什么類型的游戲&#xff0c;《帝國時代 III&#xff1a;決定版》Mac安裝教程的相關內容。 一、《帝國時代 III&…

【BOM02】本地存儲

一&#xff1a;什么是本地存儲 數據存儲在用戶瀏覽器中&#xff0c;用戶設置、讀取方便&#xff0c;同時頁面刷新時不會丟失數據。存儲在瀏覽器中數據約5M&#xff0c;分為sessionStorage和localStorage兩種存儲方式 二&#xff1a;localStorage存儲 作用 將數據永久存儲在…

opencv實戰小結-銀行卡號識別

實戰1-銀行卡號識別 項目來源&#xff1a;opencv入門 項目目的&#xff1a;識別傳入的銀行卡照片中的卡號 難點&#xff1a;銀行卡上會有一些干擾項&#xff0c;如何排除這些干擾項&#xff0c;并且打印正確的號碼是一個問題 最終效果如上圖 實現這樣的功能需要以下幾個步驟…