企業(yè)微信(服務(wù)商模式)oauth

概念

由于這種模式多了很多稀奇古怪的概念,首先我們來理一理這個概念浓利。

  1. 三種token
  • 企業(yè)接口的token
  • 應(yīng)用授權(quán)的token
  • 服務(wù)商的token

參考文檔:https://work.weixin.qq.com/api/doc#11791

  1. 各種ID
  • CorpID:整個企業(yè)微信的ID
  • SuiteID:服務(wù)商新建的每一個應(yīng)用特有的ID
  • Secret:服務(wù)商新建的每一個應(yīng)用特有的Secret

構(gòu)造登錄URL

做過oauth的同學(xué)都知道鼎俘,oauth登錄的第一步是引導(dǎo)用戶到第三方服務(wù)器示惊,然后用戶確認(rèn)授權(quán)登錄(或者靜默授權(quán))之后渣锦,跳轉(zhuǎn)回自己的服務(wù)器欧芽,同時帶上code這個參數(shù)值男韧。

企業(yè)微信服務(wù)商構(gòu)建url的文檔地址在:

https://work.weixin.qq.com/api/doc#10975/構(gòu)造第三方oauth2鏈接

就是說我們要構(gòu)建出一個地址:

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

參數(shù)名 含義
appid 服務(wù)商應(yīng)用ID
redirect_uri urlencode之后的回調(diào)地址
scope 應(yīng)用授權(quán)作用域朴摊。
snsapi_base:靜默授權(quán),可獲取成員的基礎(chǔ)信息此虑;
snsapi_userinfo:靜默授權(quán)甚纲,可獲取成員的詳細(xì)信息,但不包含手機(jī)朦前、郵箱介杆;
snsapi_privateinfo:手動授權(quán)鹃操,可獲取成員的詳細(xì)信息,包含手機(jī)春哨、郵箱荆隘。

注:snsapi_privateinfo的時候,必須在服務(wù)商應(yīng)用那里打開敏感信息授權(quán)赴背,并且注意椰拒,已經(jīng)安裝測試的應(yīng)用打開授權(quán)必須要先取消再安裝。

根據(jù)code獲取用戶的相關(guān)信息

其實(shí)就是通過get請求獲取用戶信息凰荚,請求的地址是:

https://qyapi.weixin.qq.com/cgi-bin/service/getuserinfo3rd?access_token={SUITE_ACCESS_TOKEN}&code={CODE}

當(dāng)然燃观,如果是想獲取成員信息(之前的scope不是snsapi_base),則還需要用從這個接口獲取到的user_ticket再一次請求接口https://qyapi.weixin.qq.com/cgi-bin/service/getuserdetail3rd?access_token={SUITE_ACCESS_TOKEN}

注意:如果用戶的企業(yè)沒有安裝這個應(yīng)用可以拿到openid便瑟,已經(jīng)安裝則返回userid

獲取SUITE_ACCESS_TOKEN

先上文檔:

https://work.weixin.qq.com/api/doc#11791/應(yīng)用授權(quán)的token

這個接口需要三個參數(shù)缆毁,其中suite_id和suite_secret是應(yīng)用特有的參數(shù),而suite_ticket是微信服務(wù)器通過指令回調(diào)URL每10分鐘推送過來的數(shù)據(jù)

處理企業(yè)微信指令回調(diào)

首先這個URL是應(yīng)用配置的到涂,然后post過來是xml格式的字符串脊框,當(dāng)然企業(yè)微信提供了各種語言的sdk解密這個xml數(shù)據(jù)

SDK下載地址:

https://work.weixin.qq.com/api/doc#10128

  1. 如何通過URL的校驗(yàn),首先在企業(yè)微信的應(yīng)用管理里面要校驗(yàn)通過URL才能安裝應(yīng)用践啄,然后這個校驗(yàn)就是發(fā)送一個GET請求到這個地址浇雹,然后我們只需要調(diào)用sdk的VerifyURL函數(shù),把運(yùn)算結(jié)果直接返回即可通過校驗(yàn)

下面以python作為例子:

from WXBizMsgCrypt import WXBizMsgCrypt
wxcpt=WXBizMsgCrypt(sToken,sEncodingAESKey,sCorpID)
ret,sEchoStr=wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce,sVerifyEchoStr)

輸出到瀏覽器(sEchoStr)

參數(shù)含義:

  • sToken:應(yīng)用配置的回調(diào)配置的Token
  • sEncodingAESKey:應(yīng)用配置的回調(diào)配置的EncodingAESKey
  • sCorpID:企業(yè)微信的CorpID
  • sVerifyMsgSig:GET參數(shù)msg_signature
  • sVerifyTimeStamp:GET參數(shù)timestamp
  • sVerifyNonce:GET參數(shù)nonce
  • sVerifyEchoStr:GET參數(shù)echostr
  1. 如何拿到suite_ticket

因?yàn)閟uite_ticket是10分鐘一次post到上面的URL往核,但是我們接收到的是一段xml箫爷,然后我們需要用sdk的DecryptMsg函數(shù)解碼出真正明文的xml字符串

下面以python代碼為例子:

from WXBizMsgCrypt import WXBizMsgCrypt
wxcpt=WXBizMsgCrypt(sToken,sEncodingAESKey,sCorpID)
ret,sMsg=wxcpt.DecryptMsg( sReqData, sReqMsgSig, sReqTimeStamp, sReqNonce)
  • sToken:應(yīng)用配置的回調(diào)配置的Token
  • sEncodingAESKey:應(yīng)用配置的回調(diào)配置的EncodingAESKey
  • sCorpID:企業(yè)微信的CorpID
  • sRespData: 收到的xml字符串
  • sReqNonce:GET參數(shù)nonce
  • sReqTimeStamp:GET參數(shù)timestamp
  • sReqMsgSig:GET參數(shù)msg_signature
  • sMsg:解碼后的明文xml

總結(jié)

其實(shí)服務(wù)商模式的企業(yè)微信oauth跟普通微信公眾號的oauth就只有一點(diǎn)點(diǎn)差別,首先獲取的access_token需要一個動態(tài)參數(shù)值聂儒,其中這個參數(shù)值是企業(yè)微信服務(wù)器定時發(fā)送到我們的服務(wù)器的虎锚。

然后我們調(diào)用的一些API是有IP限制的,這個需要在服務(wù)商后臺配置白名單(作用域是整個服務(wù)商所有應(yīng)用)

注意:本文寫于2017年12月19日衩婚,僅代表當(dāng)前可用窜护,不保證之后升級策略導(dǎo)致的影響

本文首發(fā)于:http://blog.yubangweb.com/qi-ye-wei-xin-fu-wu-shang-mo-shi-oauth/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市非春,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奇昙,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件储耐,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)长赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門晦攒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脯颜,你說我怎么就攤上這事《安伲” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵乐设,是天一觀的道長讼庇。 經(jīng)常有香客問我,道長近尚,這世上最難降的妖魔是什么场勤? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮和媳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘留瞳。我一直安慰自己,他們只是感情好她倘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硬梁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荧止。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天危号,我揣著相機(jī)與錄音素邪,去河邊找鬼外莲。 笑死娘香,一個胖子當(dāng)著我的面吹牛办龄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淋昭,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翔忽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驶悟,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤材失,失蹤者是張志新(化名)和其女友劉穎痕鳍,沒想到半個月后龙巨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旨别,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秸弛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铭若。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡递览,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出非迹,到底是詐尸還是另有隱情,我是刑警寧澤冷离,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站西剥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亿汞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一咆畏、第九天 我趴在偏房一處隱蔽的房頂上張望南捂。 院中可真熱鬧旧找,春花似錦、人聲如沸钮蛛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甸饱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柜候,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工渣刷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矗烛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓瞭吃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歪架。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容