企業微信逐步收緊通訊錄權限搞的第三方服務商雞飛狗跳,如果對權限要求比較高的話盡量使用自建應用模式。兩種模式大部分API都相同,重構一個自建應用版本工作量不大
剛好通過這次重構項目記錄下創建自建應用的步驟。
為了習慣,分成了管理端(后台,在瀏覽器輸入網址方式)+手機端(電腦端的企業微信登錄也算手機端)兩部分。
文檔鏈接:https://work.weixin.qq.com/api/doc/90000/90135/91022
1、登錄企業微信
點擊應用管理-》應用-》自建-》創建應用
2、創建應用后,agentid和secret后面會用到,corpid有的是wx開頭,有的以ww開頭。
3、如果使用企業微信掃碼登錄的話,需要在這里設置授權回調域名
4、需要注意的是這個回調域名必須嚴格和下面的redirect_uri一致
開發者需要構造如下的鏈接來獲取code參數:
https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=CORPID&agentid=AGENTID&redirect_uri=REDIRECT_URI&state=STATE
參數說明
參數 | 必須 | 說明 |
---|---|---|
appid | 是 | 企業微信的CorpID,在企業微信管理端查看 |
agentid | 是 | 授權方的網頁應用ID,在具體的網頁應用中查看 |
redirect_uri | 是 | 重定向地址,需要進行UrlEncode |
state | 否 | 用於保持請求和回調的狀態,授權請求后原樣帶回給企業。該參數可用於防止csrf攻擊(跨站請求偽造攻擊),建議企業帶上該參數,可設置為簡單的隨機數加session進行校驗 |
若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,如redirect_uri的域名與網頁應用的可信域名不一致
返回說明
用戶允許授權后,將會重定向到redirect_uri的網址上,並且帶上code和state參數
redirect_uri?code=CODE&state=STATE
若用戶禁止授權,則重定向后不會帶上code參數,僅會帶上state參數
redirect_uri?state=STATE
示例:
假定當前
企業CorpID:wxCorpId
開啟授權登錄的應用ID:1000000
登錄跳轉鏈接:http://api.3dept.com
state設置為:weblogin@gyoss9
需要配置的授權回調域為:api.3dept.com
根據URL規范,將上述參數分別進行UrlEncode,得到拼接的OAuth2鏈接為:
https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=wxCorpId&agentid=1000000&redirect_uri=http%3A%2F%2Fapi.3dept.com&state=web_login%40gyoss9
5、獲取用戶訪問身份
該接口用於根據code獲取成員信息
請求方式:GET(HTTPS)
請求地址:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
參數說明:
參數 | 必須 | 說明 |
---|---|---|
access_token | 是 | 調用接口憑證 |
code | 是 | 通過成員授權獲取到的code,最大為512字節。每次成員授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期。 |
權限說明:
跳轉的域名須完全匹配access_token對應應用的可信域名,否則會返回50001錯誤。
返回結果:
a) 當用戶為企業成員時返回示例如下:
{
"errcode": 0,
"errmsg": "ok",
"UserId":"USERID"
}
參數 | 說明 |
---|---|
errcode | 返回碼 |
errmsg | 對返回碼的文本描述內容 |
UserId | 成員UserID。若需要獲得用戶詳情信息,可調用通訊錄接口:讀取成員 |
b) 非企業成員授權時返回示例如下:
{
"errcode": 0,
"errmsg": "ok",
"OpenId":"OPENID"
}
參數 | 說明 |
---|---|
errcode | 返回碼 |
errmsg | 對返回碼的文本描述內容 |
OpenId | 非企業成員的標識,對當前企業唯一 |
出錯返回示例:
{
"errcode": 40029,
"errmsg": "invalid code"
}
senparc庫可以減少開發工作量,示例:6、使用
senparc.Weixin.QY.AdvancedAPIs
獲取用戶id,Senparc.Weixin.QY.AdvancedAPIs.OAuth2Api.GetUserId
7
、為了處理接收通訊錄回調消息,需要設置接收事件服務器,這里的secret如果不進行通訊錄寫操作的話,不需要使用.