摘要:是一個用于處理微信小程序的,實現思路參照了騰訊云官方微信小程序云端解決方案中的會話管理場景,即這個是其版本的一種實現。
WechatAppSessionBundle 是一個用于處理微信小程序的 Symfony Bundle,實現思路參照了騰訊云官方-微信小程序云端解決方案中的 會話管理場景,即這個 Bundle 是其 PHP(Symfony) 版本的一種實現。(只是不知道國內有多少使用 Symfony 的童鞋?)
微信的定位并不是 HTML5,這里很多人都有誤解。在一些實現上,并不能想當然地用 HTML5 的思路來思考。比如,微信的請求接口 wx.request 并不支持 cookie 傳遞,所以會話層不能使用傳統的 Session 方式。 ——騰訊云官方的微信小程序云端解決方案
該 Bundle 包含的功能:
針對特定的控制器獲取微信用戶信息并校驗合法性
將用戶信息緩存到 Redis
將用戶信息設置到 Symfony/Component/HttpFoundation/Request 對象中
安裝和配置 第一步:使用 composer 安裝 Bundlecomposer require wechat-app/session-bundle第二步:啟用 Bundle
第三步:配置依賴 Bundlesnc/redis-bundle 處理Redis操作的部分(配置)
sensio/buzz-bundle 處理 HTTP 請求的部分(可不配置)
相關依賴的深入配置,請參考其對應的文檔。
第四步:配置# app/config/config.yml snc_redis: clients: default: type: predis alias: default dsn: "redis://passwd@localhost" wechat_app_session: app_id: "wx66666" # 小程序的app id app_secret: "wx*****" # 小程序的app secret key_prefix: "wx-user:" # Redis中,用戶信息的key前綴第五步:使用在安裝和配置完成之后,Bundle 的功能馬上就可以投入使用了,該 Bundle 只會對實現了 WechatApp/SessionBundle/Controller/SessionAuthController 接口的控制器生效,對其他不是用于處理小程序請求的接口不會有影響。
處理流程請參照騰訊云提供的官方文檔。
下面舉個例子:
// src/DemoBundle/Controller/DemoController.php namespace DemoBundleController; use AppBundleControllerBaseController; use SensioBundleFrameworkExtraBundleConfigurationRoute; use SymfonyComponentHttpFoundationRequest; use WechatAppSessionBundleControllerSessionAuthController; /** * @Route("/demo") */ class DemoController extends Controller implements SessionAuthController { /** * @Route("/test") */ public function testAction(Request $request) { // 從 Request 的 header 的屬性中獲取當前請求的微信用戶信息 $wxUser = $request->attributes->get("wx_user"); return $this->json($wxUser); } }訪問上面 action 對應的路由,將返回一個包含用戶信息 json,大致是:
{ "nickName": "MJ", "gender": 1, "language": "zh_CN", "city": "Zhuhai", "province": "Guangdong", "country": "CN", "avatarUrl": "頭像URL", "openId": "owVxxxxxxxxxxx" }此時登入到 Redis 中:
keys * 1) "wx-user:session:xxxxxxxxxxx" 2) "wx-user:code:owVxxxxxxxxxxx"wx-user:code:*** 維護用戶 openid 對應的 session
wx-user:session:*** 保存著對應于前者的用戶信息
以上兩個 key 都設置了過期時間,目前定為7200秒。
以上是后端接口部分的使用,小程序端的部分相對來說比較簡單。
在首次獲取用戶信息的時候,需要調用 wx.login 和 wx.getUserInfo 接口,把獲取到的 code、rawData 和 signature 一同設置到 wx.request 接口的 header 中,設置時,有特定的名稱,分別是 X-WX-Code、X-WX-RawData 和 X-WX-Signature
接口返回非200的 HTTP 狀態碼時,請查看接口返回的提示信息,若請求成功,則會返回你自己編寫的接口所返回的信息
該 Bundle 暫時沒有提供小程序端的部分,小程序端的實現可以參考上面的說明去自行實現,或借鑒騰訊云官方提供的一個實現方式,記住,是借鑒而不是照搬,因為這個 Bundle 并非是為了搭配騰訊云提供的實現方案的,另外要注意的是,其小程序端的實現方式只實現了 wx.request 接口的包裝,而關于文件上傳、WebSocket 的實現都還沒有包裝,使用時還是需要考慮自己完善其他請求的包裝。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22043.html
摘要:安裝安裝及其客戶端命令行工具查看版本啟動創建目錄,用于數據和日志存儲啟動注首次啟動可能會花費大概時間可以使用下面的命令來檢查是否啟動成功注默認監聽端口添加用戶登錄本地服務創建用戶退出安裝模塊實現小程序的會話功能 1.安裝MongoDB #安裝 MongoDB及其客戶端命令行工具 yum install mongodb-server mongodb -y #查看版本 mongod --v...
摘要:傳統的網頁編程采用的三劍客來實現,在微信小程序中同樣有三劍客。觀察者模式不難實現,重點是如何在微信小程序中搭配其特有的生命周期來使用。交互事件傳統的事件傳遞類型有冒泡型與捕獲型,微信小程序中自然也有。 本文由作者鄒永勝授權網易云社區發布。 簡介為了更好的展示我們即時通訊SDK強悍的能力,網易云信IM SDK微信小程序DEMO的開發就提上了日程。用產品的話說就是: 云信 IM 小程序 S...
摘要:在開發之前你要有微信開發者工具。同時為了更適合開發微信小程序,還對進行了擴充以及修改,直接幫我們把適配的一部分工作都做了,比如他的,可以根據屏幕寬度進行自適應,規定屏幕寬為。 本文由云+社區發表 這段時間有幸加入了一個關于微信小程序的項目開發組,從無到有的根據文檔自行學習了小程序的開發過程,前面已經有幾位前輩的文章珠玉在前,我這里就先從前端界面的開發方面談一談小程序以及我所遇到的問題吧...
摘要:小程序的登錄跟平時自己這種登錄驗證還不太一樣,多了一個角色,那就是微信服務器。的有效期默認是小時,當用戶一直在使用小程序的話會自動刷新,這個是由微信這邊來維護的。 最近團隊在開發一款小程序,都是新手,一邊看文檔,一邊開發。在開發中會遇到各種問題,今天把小程序登錄這塊的流程整理下,做個記錄。 小程序的登錄跟平時自己APP這種登錄驗證還不太一樣,多了一個角色,那就是微信服務器。 showI...
閱讀 2374·2021-11-24 10:26
閱讀 2566·2021-11-16 11:44
閱讀 1696·2021-09-22 15:26
閱讀 3565·2021-09-10 11:11
閱讀 3178·2021-09-07 10:25
閱讀 3616·2021-09-01 10:41
閱讀 1003·2021-08-27 13:11
閱讀 3498·2021-08-16 11:02