企業微信身份驗證

本篇主要是在上一篇獲取第三方憑證基礎上,用戶通過三方網站自定義授權登錄后獲取用戶信息,以實現用戶綁定登錄功能。

構造第三方應用授權鏈接

如果第三方應用需要在打開的網頁里面攜帶用戶的身份信息,

第一步需要構造如下的鏈接來獲取授權code。

請求方式

GET

請求地址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

參數說明

參數

必須

說明

appid

第三方應用id(即ww或wx開頭的suite_id)。注意與企業的網頁授權登錄不同

redirect_uri

授權后重定向的回調鏈接地址,請使用urlencode對鏈接進行處理 ,注意域名需要設置為第三方應用的可信域名

response_type

返回類型,此時固定為:code

scope

應用授權作用域。

snsapi_base:靜默授權,可獲取成員的基礎信息(UserId與DeviceId);

snsapi_privateinfo:手動授權,可獲取成員的詳細信息,包含頭像、二維碼等敏感信息。

state

重定向后會帶上state參數,企業可以填寫a-zA-Z0-9的參數值,長度不可超過128個字節

#wechat_redirect

固定內容

企業員工點擊后,頁面將跳轉至 redirect_uri?code=CODE&state=STATE,第三方應用可根據code參數獲得企業員工的corpid與userid。code長度最大為512字節。

權限說明

使用snsapi_privateinfo的scope時,第三方應用必須有“成員敏感信息授權”的權限。

服務層業務代碼

設置一個參數就是應用的SuiteId。這里的回調地址需要前端傳遞過來,因為是測試所以寫一個固定的。返回一個網址需要在手機端企業微信中點擊觸發。

具體代碼如下:

/*** 構建企業微信授權鏈接* @param $backUrl*/
public function getCompanyWxOauth()
{$backUrl = 'https://www.test.net/api/test';$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=三方應用suiteID&redirect_uri={$backUrl}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect";echo "<a href='{$url}'>點擊</a>";
}

開通調用許可

在企業微信手機端點擊鏈接后,提示需要開通【接口調用許可】。

解決方式

首先賬號需要是測試企業,并且測試企業加入到測試企業列表中。

【應用管理】->【購買接口許可】企業微信接口許可 【購買】

?需要添加企業客戶ID,也就是之前企業授權安裝獲取的corpid。

這時候發現就變成0元可以購買了,購買后就可以訪問了。

scope的特殊情況

當oauth2中appid=corpid時,scope為snsapi_userinfo或snsapi_privateinfo時,必須填agentid參數,否則系統會視為snsapi_base,不會返回敏感信息。

第三方服務商配置scope為snsapi_privateinfo時,agentid所對應的應用必須有“成員敏感信息授權”的權限。

“成員敏感信息授權”的開啟方法為:登錄服務商管理后臺->標準應用服務->本地應用->進入應用->點擊基本信息欄“編輯”按鈕->勾選"成員敏感信息"。

獲取訪問用戶身份

?

請求方式

GET


請求地址

https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token=SUITE_ACCESS_TOKEN&code=CODE

參數說明

參數

必須

說明

suite_access_token

第三方應用憑證:suite_access_token

code

通過成員授權獲取到的code,最大為512字節。每次成員授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動過期。

業務處理

通過上篇《企業微信獲取第三方憑證》得到三方憑證也就是suite_access_token和授權鏈接得到的code,可用來獲取訪問用戶身份信息。

具體代碼如下:

/*** 獲取企業微信 suite_access_token* @return array|mixed*/
public function companyAccessToken()
{$url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token";$params = json(['suite_id' => '三方應用的suitId','suite_secret' => '三方應用Secret','suite_ticket' => 'redis存儲的回調解析得到的ticket']);$info = $this->linkCurl($url, 'POST', $params);$res = djson($info);if (isset($res['errcode'])) {return toFail('error', $res);}return toSuccess('success', ['access_token' => $suite_access_token]);
}/*** 獲取企業微信用戶信息* @param $code* @return array|mixed*/
public function getWxUserInfo($code)
{if (empty($code)) {return toFail('請輸入code參數!');}$get_access_token = $this->companyAccessToken();if ($get_access_token['status'] != 1) {return $get_access_token;}$access_token = $get_access_token['data']['access_token'];$url = "https://qyapi.weixin.qq.com/cgi-bin/service/auth/getuserinfo3rd?suite_access_token={$access_token}&code={$code}";$info = $this->linkCurl($url, 'GET');print_r($info);die;}

返回內容

返回的是通過請求授權鏈接,經過用戶允許后獲取基本用戶信息。

{"errcode":0,"errmsg":"ok","corpid":"ww0d127fa51eaab","userid":"YuanLaiShiNi","parents":[],"open_userid":"woxL4YTwAAvAGu3mLUy8dkchzW"
}

返回參數說明

參數

說明

errcode

返回碼

errmsg

對返回碼的文本描述內容

corpid

用戶所屬企業的corpid

userid

用戶在企業內的UserID,如果該企業與第三方應用沒有授權關系時,返回密文UserId,有授權關系時,按照升級后的ID策略返回明文或密文

user_ticket

成員票據,最大為512字節。
scope為snsapi_userinfo或snsapi_privateinfo,且用戶在應用可見范圍之內時返回此參數。
后續利用該參數可以獲取用戶信息或敏感信息,參見"第三方使用user_ticket獲取成員詳情"。

expires_in

user_ticket的有效時間(秒),隨user_ticket一起返回

open_userid

全局唯一。對于同一個服務商,不同應用獲取到企業內同一個成員的open_userid是相同的,最多64個字節。僅第三方應用可獲取

總結

本篇主要是在上一篇獲取第三方憑證基礎上,用戶通過三方網站自定義授權登錄后獲取用戶信息,以實現用戶綁定登錄功能。

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

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

相關文章

馬養殖場建設VR模擬實訓教學平臺具有靈活性和復用性

為保障養殖場生物安全&#xff0c;避免疫病傳播&#xff0c;學生出入養殖場受時間和地域的限制&#xff0c; 生產實習多以參觀為主&#xff0c;通過畜牧企業技術人員的講解&#xff0c;學生被動了解生產過程。為了解決畜牧養殖實訓難的問題&#xff0c;借助VR技術開展畜牧養殖虛…

通過云服務器部署JavaWeb項目

文章目錄 搭建Java運行環境部署項目更改部分項目代碼打包項目把war包上傳到webapps目錄下驗證程序 搭建Java運行環境 搭建環境的部分比較復雜&#xff0c;為了讓大家的思路更加清晰特別總結為一篇博客點擊查看 部署項目 更改部分項目代碼 打包項目 把war包上傳到webapps目錄…

大洋鉆探系列之三IODP 342航次是干什么的?(下)

上文簡要地介紹IODP342航次的總體情況&#xff0c;本文以航次1個鉆孔&#xff08;U1403&#xff09;為例&#xff0c;更為詳細地系統展示大洋鉆探航次的工作和成果。 ?編輯? 站位疊加多波束影像的成果圖見下圖&#xff0c;從圖中的顏色效果可以看出&#xff0c;此多波束的成…

歸并排序算法

文章目錄 歸并排序一、歸并排序思路二、歸并排序算法模板三、題目代碼 歸并排序 一、歸并排序思路 二、歸并排序算法模板 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;//中間值merge_sort(q, l, mid);merge_sort(q, mid 1, r);…

大數據分析與應用實驗任務九

大數據分析與應用實驗任務九 實驗目的 進一步熟悉pyspark程序運行方式&#xff1b; 熟練掌握pysaprkRDD基本操作相關的方法、函數&#xff0c;解決基本問題。 實驗任務 進入pyspark實驗環境&#xff0c;打開命令行窗口&#xff0c;輸入pyspark&#xff0c;完成下列任務&am…

Redis入門教程

1. 什么是NoSql NoSQL一詞最早出現于1998年&#xff0c;是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系數據庫。2009年&#xff0c;Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論&#xff0c;來自Rackspace的Eric Evans再次提出了NoSQL的概念&am…

onnx導出報錯 | IndexError: index_select(): Index is supposed to be a vector

解決方案&#xff1a; 在torch.onnx.export鐘添加do_constant_foldingFalse&#xff0c;如下 torch.onnx.export(model,(None, text),text_fp32_onnx_path,input_names[text],output_names[unnorm_text_features],export_paramsTrue,opset_version13,verboseTrue,do_constant_…

編程參考 - C++ Code Review: 一個計算器的項目

GitHub - jroelofs/calc: Toy Calculator Toy Calculator 1&#xff0c;拿到一個project&#xff0c;第一眼看&#xff0c;沒有配置文件&#xff0c;說明沒有引入持續集成系統&#xff0c;continuous integration system。 2&#xff0c;然后看cmake文件&#xff0c;使用的子…

使用Python的turtle模塊繪制鋼鐵俠圖案

1.1引言&#xff1a; 在Python中&#xff0c;turtle模塊是一個非常有趣且強大的工具&#xff0c;它允許我們以一個可視化和互動的方式學習編程。在本博客中&#xff0c;我們將使用turtle模塊來繪制鋼鐵俠的圖案。通過調用各種命令&#xff0c;我們可以引導turtle繪制出指定的圖…

第十四章 控制值的轉換 - 在DISPLAYLIST中投影值

文章目錄 第十四章 控制值的轉換 - 在DISPLAYLIST中投影值在DISPLAYLIST中投影值 第十四章 控制值的轉換 - 在DISPLAYLIST中投影值 在DISPLAYLIST中投影值 對于 %String 類型&#xff08;或任何子類&#xff09;的屬性&#xff0c;XML 投影可以使用 DISPLAYLIST 參數。 簡單…

CrystalDiskInfo/CrystalDiskMark/DiskGenius系統遷移

CrystalDiskInfo 主要用于看硬盤的各種信息&#xff0c;包括但不限于硬盤通電時間、通電次數、硬盤好壞狀態 CrystalDiskMark 主要用于測試硬盤的讀寫速度、連續讀寫速度 DiskGenius 主要用于通過U盤裝操作系統后進行&#xff0c;磁盤分區&#xff0c;更改磁盤名、隱藏部分…

【前端知識】Node——http模塊url模塊的常用操作

一、創建簡易Server const http require(http); const URL require(url);const HTTP_PORT 8088;const server http.createServer((req, res) > {// req&#xff1a;request請求對象&#xff0c;包含請求相關的信息&#xff1b;// res&#xff1a;response響應對象&…

【MISRA C 2012】Rule 5.2 在同一作用域和名稱空間中聲明的標識符應該是不同的

1. 規則1.1 原文1.2 分類 2. 關鍵描述3. 代碼實例 1. 規則 1.1 原文 Rule 5.2 Identifiers declared in the same scope and name space shall be distinct Category Required Analysis Decidable, Single Translation Unit Applies to C90, C99 1.2 分類 規則4.2&#xff…

案例014:Java+SSM+uniapp+mysql基于微信小程序的健身管理系統

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder X 小程序…

【機器學習 | ARIMA】經典時間序列模型ARIMA定階最佳實踐,確定不來看看?

&#x1f935;?♂? 個人主頁: AI_magician &#x1f4e1;主頁地址&#xff1a; 作者簡介&#xff1a;CSDN內容合伙人&#xff0c;全棧領域優質創作者。 &#x1f468;?&#x1f4bb;景愿&#xff1a;旨在于能和更多的熱愛計算機的伙伴一起成長&#xff01;&#xff01;&…

SpringBoot:ch02 配置文件(日志)

前言 簡單介紹 Spring Boot 中常見的配置文件類型&#xff0c;如 application.properties 和 application.yml 等&#xff0c;并說明它們各自的特點和用途。 一、前期準備 1、新建項目&#xff0c;結構如下 2、添加依賴 <?xml version"1.0" encoding"UTF…

單片機語音芯片開發要解決的問題

在單片機語音芯片開發過程中&#xff0c;可能會遇到多種問題&#xff0c;這些問題可能來自于技術層面&#xff0c;也可能來自于芯片本身的設計和應用層面。下面讓我們具體從芯片的功耗、語音識別的準度、芯片的尺寸和芯片的可靠性四個方面開展討論。 1.芯片的功耗問題 首先&a…

【AIGC重塑教育】AI大爆發的時代,未來的年輕人怎樣獲得機會和競爭力?

目錄 AI浪潮來襲 AI與教育 AI的優勢 延伸閱讀 推薦語 ?作者&#xff1a;劉文勇 來源&#xff1a;IT閱讀排行榜 本文摘編自《AIGC重塑教育&#xff1a;AI大模型驅動的教育變革與實踐》&#xff0c;機械工業出版社出版 AI浪潮來襲 這次&#xff0c;狼真的來了。 AI正迅猛地…

81基于matlab GUI的圖像處理

基于matlab GUI的圖像處理&#xff0c;功能包括圖像顏色處理&#xff08;灰度圖像、二值圖像、反色變換、直方圖、拉伸變換&#xff09;&#xff1b;像素操作&#xff08;讀取像素、修改像素&#xff09;、平滑濾波&#xff08;均值平滑、高斯平滑、中值平滑&#xff09;、圖像…