SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
這是Jerry 2020年的第87篇文章,也是汪子熙公眾號總共第269篇原創文章。
本系列的英文版Jerry寫作于2017年,這個教程總共包含十篇文章,發表在SAP社區上。
系列目錄
(1)?微信開發環境的搭建
(2)?如何通過微信公眾號消費API
(3)?微信用戶關注公眾號之后,自動在SAP C4C系統創建客戶主數據
(4)?如何將SAP C4C主數據變化推送給微信公眾號
(5)?如何將SAP UI5應用嵌入到微信公眾號菜單中
(6) 如何通過OAuth2獲取微信用戶信息并顯示在SAP UI5應用中(本文)
(7) 使用Redis存儲微信用戶和公眾號的對話記錄
(8) 微信公眾號的地圖集成
(9) 如何將微信用戶發送到微信公眾號的消息保存到SAP C4C系統
(10) 如何在SAP C4C系統直接回復消息給微信公眾號的訂閱者
最近有不少朋友在微信上向我咨詢SAP系統和微信公眾號集成的問題,因此我把當時寫的英文版翻譯成中文,重新發布在我的公眾號上。
需要注意的是,時隔三年,微信公眾號的開發流程可能有所變化,請大家自行鑒別。和微信公眾號集成的系統,我三年前選擇的是SAP Cloud for Customer.
這個系列的第五篇文章,我們已經將一個SAP UI5應用綁定到了微信公眾號的一個菜單上。點擊該菜單,該SAP UI5應用就會在微信app嵌入的瀏覽器里打開并運行。
本文我們更進一步,在打開的SAP UI5應用里,顯示一些點擊了該公眾號菜單的微信用戶的個人信息,比如微信昵稱。
看一個例子:假設Jerry自己的個人微信號昵稱為null:(這個昵稱高居被前端工程師吐槽的用戶昵稱排名之首,原因大家都懂的)
當我關注了測試微信公眾號,點擊公眾號菜單打開SAP UI5應用后,我發現自己的微信昵稱,null,出現在了SAP UI5應用的某個字段里:
本文余下部分,會詳述這個場景的實現步驟。
在微信公眾號后臺開發中心的文檔區域里,點擊“網頁授權獲取用戶基本信息”,即可查看微信的官方文檔:
官方文檔提到,如果用戶在微信客戶端中訪問第三方網頁(比如訪問我們自行開發且部署在某云平臺上的SAP UI5應用),并且該第三方應用會調用API獲取微信用戶個人信息時,公眾號需要遵循微信定義的OAuth2 網頁授權機制,即需要用戶在微信app里手動點擊“確認登錄”之后,才能允許第三方應用調用微信API,獲取當前登錄用戶的個人信息。
從用戶的視角出發,其感知到的流程如下:
(1) 用戶試圖在微信app里通過微信公眾號菜單訪問第三方應用。
(2) 在微信app里,用戶看到微信登錄的對話框,包含文字“網頁由該公眾號開發,請確認授權以下信息”和一個“確認登錄”的按鈕。
(3) 用戶點擊“確認登錄”之后,看到了自己想訪問的第三方應用,且該應用頁面上顯示了自己的微信個人信息比如昵稱字段。
以上三個步驟,背后其實發生了很多事情,也需要開發人員對應的編程去實現。
我認為用倒序的方式講解這三個流程中發生的事情,大家會比較容易理解一些。
在步驟三里,第三方應用調用API獲取用戶微信昵稱時,需要網頁授權Access Token,該Token和普通的Access Token并不是一回事,二者獲取方式也有差異:
普通的Access Token的獲取和使用方式,在Jerry這個系列之前的文章已經介紹過,通過微信公眾號的app id和app secret去換取即可,這里不再重復。
而現在討論的網頁授權Access Token,除了微信公眾號的app id和app secret之外,還需要另一個code才能換取成功。這個code從哪里來?步驟三里,微信用戶點擊了“確認登錄”的按鈕之后:
微信會自動生成一個code,并將該code傳給我們的第三方應用。第三方應用通過編程,接收到微信傳來的這個code之后,調用API,利用該code去換取網頁授權Access Token,再使用后者,調用讀取微信用戶昵稱的API,即可獲取微信用戶的昵稱了。
所以,上圖在微信app中彈出的對話框,技術上來說,作用有二:
(1) 顯式征求用戶的第三方網頁訪問授權;
(2) 用戶授權后,將微信生成的code發送給第三方應用。
下面我們按照順序,把完整的實現流程過一遍。
(1) 點擊下圖的“修改”鏈接,配置第三方應用的回調域名。
用戶在微信app里點擊了“確認登錄”之后,微信生成的code會發送到這個域名下的第三方應用去。
我用nodejs開發了一個應用,監聽微信傳遞過來的code,該應用的url為:
https://wechatjerry.herokuapp.com/tokenCallback
因此對應的域名配置如下:
(2) 在用戶首次訪問第三方應用之前,需要在微信app里彈出網頁授權請求窗口。這個窗口的彈出,需要進行一番配置。
微信官方文檔里給出了一種方式,即推送如下的url給微信用戶,用戶點擊之后,即可在微信app里,彈出網頁授權訪問的對話框:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=&redirect_uri=&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
上面的url模板需要根據實際情況,填充微信公眾號的app id和第三方應用用于接收微信網頁授權code的地址。
對于我這個例子來說,最后完整的url為:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx73b49bfe02fd3a17&redirect_uri=https://wechatjerry.herokuapp.com/tokenCallback&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
當用戶在微信app里點擊了這個url之后,就會看到下面的網頁授權對話框了:
用戶點擊“確認登錄”之后,微信app就會將一個自動生成的code,發送到我之前url里指定的回調地址去:
https://wechatjerry.herokuapp.com/tokenCallback
在nodejs應用里,響應來自tokenCallback的HTTP POST請求:
拿到了code之后,就可以在authorizeAndRedirect函數里,通過app id,app secret和code,三者一齊去換取網頁授權的Access Token:
拿到Access Token之后,再調用getUserinfo函數,使用Access Token和微信用戶的openID,調用獲取微信用戶個人信息的API,從而拿到用戶昵稱,在下圖第68行打印出來,然后在第70行,將該昵稱通過url參數的方式,重定向到SAP UI5應用:
在SAP UI5應用的init鉤子里,使用jQuery.sap.getUriParameters().get, 讀取到這個傳入的url參數,將其綁定到模型名稱為modelForview內的MasterTitle字段上:
最后,把SAP UI5應用Master List的頁面標題控件的title屬性,綁定到上述MasterTitle模型字段即可。
這樣,我的微信昵稱null,就成功顯示在SAP UI5 Master List的標題控件上了:
本文提到的源代碼實現,在我的Github上。
本文提到的OAuth 2認證機制,如今已經廣泛應用于各種第三方應用的授權登錄場景中。
本系列的下一篇文章,Jerry會介紹,如何使用Redis, 存儲用戶和微信公眾號的聊天記錄,感謝閱讀。
系列目錄
(1)?微信開發環境的搭建
(2)?如何通過微信公眾號消費API
(3)?微信用戶關注公眾號之后,自動在SAP C4C系統創建客戶主數據
(4)?如何將SAP C4C主數據變化推送給微信公眾號
(5)?如何將SAP UI5應用嵌入到微信公眾號菜單中
(6) 如何通過OAuth2獲取微信用戶信息并顯示在SAP UI5應用中(本文)
(7) 使用Redis存儲微信用戶和公眾號的對話記錄
(8) 微信公眾號的地圖集成
(9) 如何將微信用戶發送到微信公眾號的消息保存到SAP C4C系統
(10) 如何在SAP C4C系統直接回復消息給微信公眾號的訂閱者
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在MFC中获取窗口\视图句柄 &获取当前
- 下一篇: 华为p30拍星空怎么设置