摘要:是一个用于处理微信小程序的,实现思路参照了腾讯云官方微信小程序云端解决方案中的会话管理场景,即这个是其版本的一种实现。
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 的实现都还没有包装,使用时还是需要考虑自己完善其他请求的包装。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/22043.html
摘要:安装安装及其客户端命令行工具查看版本启动创建目录,用于数据和日志存储启动注首次启动可能会花费大概时间可以使用下面的命令来检查是否启动成功注默认监听端口添加用户登录本地服务创建用户退出安装模块实现小程序的会话功能 1.安装MongoDB #安装 MongoDB及其客户端命令行工具 yum install mongodb-server mongodb -y #查看版本 mongod --v...
摘要:传统的网页编程采用的三剑客来实现,在微信小程序中同样有三剑客。观察者模式不难实现,重点是如何在微信小程序中搭配其特有的生命周期来使用。交互事件传统的事件传递类型有冒泡型与捕获型,微信小程序中自然也有。 本文由作者邹永胜授权网易云社区发布。 简介为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程。用产品的话说就是: 云信 IM 小程序 S...
摘要:在开发之前你要有微信开发者工具。同时为了更适合开发微信小程序,还对进行了扩充以及修改,直接帮我们把适配的一部分工作都做了,比如他的,可以根据屏幕宽度进行自适应,规定屏幕宽为。 本文由云+社区发表 这段时间有幸加入了一个关于微信小程序的项目开发组,从无到有的根据文档自行学习了小程序的开发过程,前面已经有几位前辈的文章珠玉在前,我这里就先从前端界面的开发方面谈一谈小程序以及我所遇到的问题吧...
摘要:小程序的登录跟平时自己这种登录验证还不太一样,多了一个角色,那就是微信服务器。的有效期默认是小时,当用户一直在使用小程序的话会自动刷新,这个是由微信这边来维护的。 最近团队在开发一款小程序,都是新手,一边看文档,一边开发。在开发中会遇到各种问题,今天把小程序登录这块的流程整理下,做个记录。 小程序的登录跟平时自己APP这种登录验证还不太一样,多了一个角色,那就是微信服务器。 showI...
阅读 2373·2021-11-24 10:26
阅读 2565·2021-11-16 11:44
阅读 1695·2021-09-22 15:26
阅读 3565·2021-09-10 11:11
阅读 3178·2021-09-07 10:25
阅读 3615·2021-09-01 10:41
阅读 1002·2021-08-27 13:11
阅读 3498·2021-08-16 11:02