微信企業(yè)號(hào)是微信為企業(yè)客戶提供的移動(dòng)服務(wù)扯躺,旨在提供企業(yè)移動(dòng)應(yīng)用入口。它可以幫助企業(yè)建立員工藕畔、上下游供應(yīng)鏈與企業(yè)IT 系統(tǒng)間的連接马僻。利用企業(yè)號(hào),企業(yè)或第三方服務(wù)商可以快速注服、低成本的實(shí)現(xiàn)高質(zhì)量的企業(yè)移動(dòng)輕應(yīng)用韭邓,實(shí)現(xiàn)生產(chǎn)、管理溶弟、協(xié)作女淑、運(yùn)營(yíng)的移動(dòng)化。
公司微信申請(qǐng)企業(yè)號(hào)后就沒(méi)怎么用過(guò)辜御,只是作為管理員需要添加同事時(shí)需要掃下碼驗(yàn)證鸭你,對(duì)于企業(yè)號(hào)的存在意義及使用場(chǎng)景沒(méi)有切身體會(huì),這才有了在實(shí)現(xiàn)項(xiàng)目需求過(guò)程中踩了些坑擒权,整理下細(xì)節(jié)事項(xiàng)袱巨,避免后續(xù)再被絆倒。
菜單項(xiàng)在「應(yīng)用中心」配置碳抄;通過(guò)「通訊錄」管理哪些同事有權(quán)限看到菜單瓣窄;用戶查看菜單鏈接時(shí)微信通過(guò)「權(quán)限管理組」把認(rèn)證的用戶信息回調(diào)給開(kāi)發(fā)者;這樣就完成了查看菜單的權(quán)限在微信端搞定纳鼎,跳轉(zhuǎn)至菜單鏈接時(shí)傳來(lái)微信的認(rèn)證接力信息俺夕,菜單鏈接內(nèi)的權(quán)限由開(kāi)發(fā)者根據(jù)業(yè)務(wù)需求自行控制;下面的筆記就是來(lái)記錄實(shí)現(xiàn)這段認(rèn)證邏輯的中注意事項(xiàng)贱鄙。
通訊錄
可以邀請(qǐng)關(guān)注劝贸,也可以直接新增成員;通訊錄一定要錄入逗宁,同時(shí)用戶也要關(guān)注企業(yè)號(hào)映九,二者缺一不可。
強(qiáng)調(diào)的是一定要把手機(jī)號(hào)或郵箱錄入瞎颗,微信認(rèn)證成功響應(yīng)的用戶信息就是這里配置的信息件甥,業(yè)務(wù)權(quán)限上的關(guān)聯(lián)只能通過(guò)手機(jī)號(hào)或郵箱(本項(xiàng)目中是使用郵箱)。
通訊錄中的組織架構(gòu)或標(biāo)簽對(duì)后續(xù)操作影響不大哼拔,人少時(shí)直接添加用戶引有,人多時(shí)使用標(biāo)簽、組織快捷些倦逐。
菜單項(xiàng)
「可見(jiàn)范圍」是對(duì)企業(yè)號(hào)內(nèi)查看菜單項(xiàng)的權(quán)限配置譬正,應(yīng)該細(xì)致些,否則同事有權(quán)限看到菜單但點(diǎn)擊進(jìn)入又提示無(wú)權(quán)限會(huì)引來(lái)電話詢問(wèn)的。
「主頁(yè)URL」是核心曾我,是通過(guò)呼叫微信的接口回調(diào)至自家項(xiàng)目的鏈接粉怕,注意事項(xiàng)如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
參數(shù) | 必須 | 說(shuō)明 |
---|---|---|
appid | 是 | 企業(yè)的CorpID |
redirect_uri | 是 | 授權(quán)后重定向的回調(diào)鏈接地址, 請(qǐng)使用urlencode對(duì)鏈接進(jìn)行處理 |
response_type | 是 | 返回類型抒巢,此時(shí)固定為:code |
scope | 是 | 應(yīng)用授權(quán)作用域贫贝,此時(shí)固定為:snsapi_base |
state | 否 | 重定向后會(huì)帶上state參數(shù), 企業(yè)可以填寫a-zA-Z0-9的參數(shù)值蛉谜, 長(zhǎng)度不可超過(guò)128個(gè)字節(jié) |
#wechat_redirect | 是 | 微信終端使用此參數(shù)判斷是否需要帶上身份信息 |
具體配置可參考文檔:企業(yè)號(hào)開(kāi)發(fā)者中心 - OAuth2.0驗(yàn)證接口說(shuō)明稚晚。
企業(yè)的 CorpID 可以在「設(shè)置」「企業(yè)號(hào)信息」模塊下看到;不要把測(cè)試環(huán)境(自家企業(yè)號(hào))的主頁(yè)URL 拷貝至客戶就行了悦陋,切記一定要修改 CorpID 為客戶企業(yè)號(hào)的蜈彼。
「可信域名」就是回調(diào)函數(shù)中傳參數(shù)的鏈接域名或 ip。
權(quán)限管理組
若上述配置成功俺驶,在從微信菜單項(xiàng)跳轉(zhuǎn)至自家鏈接時(shí)幸逆,微信會(huì)給點(diǎn)擊訪問(wèn)菜單的用戶臨時(shí)分配一串值,通過(guò) code
參數(shù)追加在菜單鏈接后面暮现,微信認(rèn)證的流程開(kāi)始了还绘。
獲取 access_token
get https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
reponse
{
"access_token": "accesstoken000001",
"expires_in": 7200
}
參數(shù) | 必須 | 說(shuō)明 |
---|---|---|
corpid | 是 | 企業(yè)Id |
corpsecret | 是 | 管理組的憑證密鑰 |
具體配置可參考文檔:企業(yè)號(hào)開(kāi)發(fā)者中心 - 獲取AccessToken
corpid
是企業(yè)號(hào)的屬性,很容易獲取栖袋, corpsecret
是哪來(lái)的拍顷,答案是來(lái)自權(quán)限管理組。
如果對(duì)「權(quán)限管理組」不了解塘幅,不要擅自對(duì)已創(chuàng)建的管理組修改昔案,建議新建管理組。
「應(yīng)用權(quán)限」選擇「應(yīng)用中心」創(chuàng)建的菜單項(xiàng)电媳,可多選踏揣。
「通訊錄權(quán)限」此處選擇的通訊錄范圍應(yīng)該大于或等于「應(yīng)用中心」中配置的「可見(jiàn)范圍」,這樣建議的前提是牢牢把關(guān)好「可見(jiàn)范圍」匾乓。
「CorpID」企業(yè)號(hào)內(nèi)所有出現(xiàn)的值都是一致的捞稿。
「Secret」對(duì)權(quán)限管理組是唯一分配的,并與「通訊錄權(quán)限」緊密關(guān)聯(lián)拼缝;「應(yīng)用中心」「可見(jiàn)范圍」大于「權(quán)限管理」「通訊錄權(quán)限」的那部分用戶就無(wú)法通過(guò)微信接口獲取該用戶的信息娱局。
訪問(wèn)菜單項(xiàng)的用戶信息
get https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
response
// 企業(yè)成員授權(quán)時(shí)
{
"UserId":"USERID",
"DeviceId":"DEVICEID"
}
// 非企業(yè)成員授權(quán)時(shí)
{
"OpenId":"OPENID",
"DeviceId":"DEVICEID"
}
非企業(yè)號(hào)成員授權(quán)時(shí),直接提示權(quán)限受限信息咧七;企業(yè)號(hào)授權(quán)成員繼續(xù)衰齐。
?get https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID
response
{
"errcode": 0,
"errmsg": "ok",
"userid": "zhangsan",
"name": "李四",
"department": [1, 2],
"position": "后臺(tái)工程師",
"mobile": "15913215421",
"gender": "1",
"email": "zhangsan@gzdev.com",
"weixinid": "lisifordev",
"avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
"status": 1,
"extattr": {"attrs":[{"name":"愛(ài)好","value":"旅游"},{"name":"卡號(hào)","value":"1234567234"}]}
}
具體配置可參考文檔:企業(yè)號(hào)開(kāi)發(fā)者中心 - 獲取成員
到此就獲取到了訪問(wèn)者的郵箱,再到本地?cái)?shù)據(jù)庫(kù)中匹配猪叙,若未查詢到或業(yè)務(wù)權(quán)限不足娇斩,繼續(xù)提示更明細(xì)的權(quán)限受限原因仁卷;有權(quán)限穴翩,就可以看到該用戶權(quán)限內(nèi)的內(nèi)容犬第。
切換環(huán)境或企業(yè)號(hào)配置時(shí),切記清除舊的 access_token 緩存芒帕,使用新的 corpid/secret 重新獲取并更新緩存歉嗓。
瑣碎細(xì)節(jié)
去除微信頁(yè)面安全風(fēng)險(xiǎn)提示
企業(yè)號(hào)從名字就能看出來(lái)品牌很重要,通過(guò)自家企業(yè)號(hào)菜單訪問(wèn)的網(wǎng)頁(yè)竟然提示什么安全風(fēng)險(xiǎn)背蟆,客戶無(wú)論如何是接受不了的鉴分;當(dāng)然在測(cè)試階段就優(yōu)化掉了,讓客戶少說(shuō)話多點(diǎn)頭带膀,這樣大家都輕松志珍。
企業(yè)號(hào)內(nèi)無(wú)「業(yè)務(wù)域名」模塊,很疑惑這樣合理嗎垛叨,公眾號(hào)(訂閱號(hào))什么場(chǎng)景需要業(yè)務(wù)域名呢伦糯?
每個(gè)公眾號(hào)只支持三個(gè)業(yè)務(wù)域名,若企業(yè)號(hào)項(xiàng)目很多時(shí)嗽元,建議由客戶的公眾號(hào)來(lái)配置此類操作敛纲,合理使用資源。
access_token
有效期兩小時(shí)剂癌,有效期內(nèi)響應(yīng)的值不變淤翔;定時(shí)任務(wù)要盡量頻率快,比較是否過(guò)期佩谷,而不是與微信接口多交互旁壮。
code
是臨時(shí)的,但 UserID
是固定的谐檀,可以把用戶的明細(xì)信息緩存下來(lái)抡谐,后續(xù)就少了一次微信接口交互,本地訪問(wèn)肯定更高效些稚补;但要記得定時(shí)刷新用戶信息童叠,萬(wàn)一后臺(tái)用戶信息的聯(lián)系方式有調(diào)整呢;高效性與及時(shí)性的平衡要權(quán)重好课幕。