`
a283037321
  • 浏览: 17319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

微信开发之架构设计

阅读更多

    微信作为一款app,提供了友好的用户体验,在开发微信应用时,我们应该尽可能得让自己的网页像webapp一样。用户使用我们的网页,就好像在使用微信内置的app,这样用户才会喜欢我们的网站。

   本文将讲解微信开发的前期准备,包括微信开发上的一些坑、架构上的设计、接口上需要注意的地方,全部来自自己的开发经验,如有不对,请指正。

 

微信开发的坑

 

1、微信授权

    微信中涉及到了OAuth2.0网页授权,正因为这样,我理所当然的用这个接口来读取用户的基本信息,包括头像、用户名等,因为之前了解过淘宝的公众平台,大家都是这么玩儿的。

    后来走了不少弯路,oauth2.0只是一个网页授权,它在微信中被分为高级接口中,其意义在于用户没有关注您的公众号但是只要用户同意,你也可以读取到用户的相关基本信息。前面我们讲到,我们应该把咱的网页做得尽可能的像一个webapp,我是不推荐大量使用oauth去授权的。

    我们应该努力地让用户成为我们的粉丝,并且在后台数据库中做上标记:这个用户已经关注我们了。这个标记很有用,后面的模板消息、客服接口等都推送接口都需要用户已经关注我们的公众号了。

    同样,用户关注了我们后,我们可以不使用oauth2.0去进行网页授权了,使用“获取用户基本信息”接口同样可以获取用户的基本信息,这样就不会有授权页面出现,大大提高了用户体验。

 

2、openId

    openId往往被我们用来作为用户的唯一标识,其实这是不对的。openId只在对当前公众号唯一,你可以认为它是MD5(公众号ID+用户微信ID)。我公司的产品设计到多个公众号,但是后台数据库可能重用,想当然的就把openId公用了,结果可想而知。

   其实微信为开发者提供了UnionId的机制,通过获取用户基本信息中的UnionId来保证用户的唯一性,后续再写Union机制的具体实现。

 

3、AccessToken

微信中基本所有的接口调用都需要一个accesstoken,这个accesstoken的获取是有频率限制的,正常情况下access_token有效期为7200秒,这个需要特别注意,我们可以将accesstoken持久化,获取accesstoken的方法判断是否该重新获取,至于持久化的方法,可以使用redis、数据库、本地内存等。

 

4、session问题

    大部分人认为微信窗口关闭后,session就消失了,重新打开窗口访问应用相当于重建session。这也是有问题的,微信中重新打开窗口sessionId并不会重新生成,其实可以想象微信为了不让开发者的服务器不断重建session造成压力已经将sessionId持久化了一段时间。

    sessionId其实是服务端识别用户所属session的标识,只要sessionId不变,那用户的session上下文也不会变,也就不会重建session了。

    最合理的方案其实应该讲session自定义,比如使用memcache、redis等独立的缓存服务来存储session,好处是用户不打开我们的网站而是点击微信聊天窗口的菜单与我们的服务器交互时,我们照样可以识别是哪一个用户在与我们交互。

 

架构设计

    架构设计应与我们的网站系统业务相结合,大体上将几点值得注意的地方。

   1、第一点就是上面所讲的sessionId问题,如果我们自定义了sessionId,可以带来相当大的好处。在应用中,可以使用具有一定规律的自定义sessionId方便的找到一个用户,对用户进行操作。

   2、微信的接口和通常所说的接口有些不一样。通常的接口是两个系统间进行交互,而微信的接口是用户发起操作,我们的服务器访问微信服务器进行交互,返回数据给用户。相当于我们是一个中间件,供用户去操作微信。这就带来一个问题:当并发量大了之后,服务器不断的发送请求到微信,这对服务器的带宽都是一个不小的考验。

    所以我们需要适当考虑接口的重试机制。拿获取用户基本信息来说,完全有可能第一次请求无响应,第二次请求才成功,不要因为第一次的失败就导致我们拿不到用户的基本信息了。

   3、缓存。不止是针对微信,互联网网站缓存可以说是必不可少的。我比较喜欢使用redis来作为缓存,当然,mongodb也不差。

 

 

 转载请保留出处,尊重原创,

 

http://a283037321.iteye.com/blog/2148661

6
2
分享到:
评论
6 楼 a283037321 2014-12-03  
belivexiaoqi 写道
你好,想请假一个问题:

用户通过微信菜单跳转到wap页面登录,登录成功后系统以cookie的形式存了个sessionid放在微信内置浏览器里面,有效期一个月。

我的问题是:微信内置浏览器会不会把这个sessionid给清除掉。

经验不是很多请指教,谢谢!



你好,微信的cookie是很不靠谱的。据我测试,微信把cookie的保存时间固定了,比如sessionId,普通浏览器一般都是重新打开后就重新生成了,而微信不是,它能保证大约半小时之内不会重新生成,这就是为了节约不断点击微信菜单造成服务器压力。
至于你说的将sessionId持久化到cookie,同理,也是不靠谱的,你设置的时间应该是没有用的,微信想删就删了,况且用户在设置里面同样可以清除。
  你为什么要持久化sessionId,无非就是希望sessionId和用户做一个绑定关系,这是分布式环境中常用的手段,将session提取出来统一处理。建议你的做法是将sesisonId存储在服务端,然后每一次交互都获取微信的openId,将openId和sessionId做关系映射
5 楼 belivexiaoqi 2014-12-02  
你好,想请假一个问题:

用户通过微信菜单跳转到wap页面登录,登录成功后系统以cookie的形式存了个sessionid放在微信内置浏览器里面,有效期一个月。

我的问题是:微信内置浏览器会不会把这个sessionid给清除掉。

经验不是很多请指教,谢谢!

4 楼 zhangt882 2014-10-29  
a283037321 写道
zhangt882 写道
楼主,看完你的文章,我有个问题。
在第一点的最后你说到不用oauth2.0去获取用户的基本信息。如果用户是通过点击菜单跳转到我们的网站,我们怎么获取到用户的基本信息呢?点击菜单跳转网页,我们是拿不到openid的啊。


谢谢评论,确实是拿不到的,我的意思是我们应该引导用户去成为我们的粉丝,成为粉丝之后根据事件推送是可以拿到openId的,然后可以使用“获取用户基本信息”获取用户基本信息。试想如果用户从外部链接进入我们的网站,就是通过授权获取了基本信息,但他不是我们的粉丝,有什么用呢?后面的推送照样无法使用。所以我们的目的是让用户成为我们的粉丝,使用oauth2.0授权会造成用户的不安,总觉得你这个网站要偷我的隐私。当然,oauth2.0也是可以使用的,看需求吧。


哈哈,原来是这个意思,懂了!
3 楼 a283037321 2014-10-29  
zhangt882 写道
楼主,看完你的文章,我有个问题。
在第一点的最后你说到不用oauth2.0去获取用户的基本信息。如果用户是通过点击菜单跳转到我们的网站,我们怎么获取到用户的基本信息呢?点击菜单跳转网页,我们是拿不到openid的啊。


谢谢评论,确实是拿不到的,我的意思是我们应该引导用户去成为我们的粉丝,成为粉丝之后根据事件推送是可以拿到openId的,然后可以使用“获取用户基本信息”获取用户基本信息。试想如果用户从外部链接进入我们的网站,就是通过授权获取了基本信息,但他不是我们的粉丝,有什么用呢?后面的推送照样无法使用。所以我们的目的是让用户成为我们的粉丝,使用oauth2.0授权会造成用户的不安,总觉得你这个网站要偷我的隐私。当然,oauth2.0也是可以使用的,看需求吧。
2 楼 zhangt882 2014-10-28  
楼主,看完你的文章,我有个问题。
在第一点的最后你说到不用oauth2.0去获取用户的基本信息。如果用户是通过点击菜单跳转到我们的网站,我们怎么获取到用户的基本信息呢?点击菜单跳转网页,我们是拿不到openid的啊。
1 楼 zj_jay 2014-10-28  
写的很详细,不错!

相关推荐

    微信技术总监分享架构设计高清完整PDF版

    ### 微信技术总监分享架构设计的核心知识点 #### 一、微信之道——至简 - **背景介绍**:微信作为一款现象级应用,其成功离不开其背后强大的技术支撑与先进的设计理念。微信技术总监周颢在腾讯大讲堂的演讲中分享...

    微信ANDROID客户端架构演进及其对开发流程的影响.pdf

    这些变革不仅反映了软件工程实践中对于架构设计的深入理解和实践经验的积累,而且对于解决诸如性能瓶颈、用户体验提升等问题具有重要意义。 #### 架构演进历程 **1. 微信客户端架构V1(1.0~)** - **多Activity...

    微信插件化架构

    1. **模块化设计**:微信插件化架构的核心思想是将一个大型的应用程序分解为多个小型、独立的模块,每个模块都有明确的职责,可以单独开发、测试和部署。这样做有助于降低系统的复杂性,提高代码的可读性和可维护性...

    微信后台微服务架构及存储架构设计.pdf

    微信作为中国最为流行的社交软件,其后台架构设计一直是业界关注的焦点。从文件内容来看,我们可以了解到微信后台微服务架构及存储架构设计的关键技术和概念,下面将围绕这些知识点进行详细介绍。 1. 微信发展技术...

    基于服务调度的微信公众平台开发架构设计与实现

    基于服务调度的微信公众平台开发架构设计与实现

    微信技术总监分享架构设计

    微信技术总监周颢在中山大学的演讲中揭示了微信在架构设计上的独特之处,让我们一起深入探讨这些关键技术点。 首先,微信的核心是消息的高效处理与传输。微信的技术团队构建了一套强大的实时通信系统,它能够支持亿...

    微信小程序架构设计.pdf

    总的来说,微信小程序的架构设计涵盖了前端用户体验、后端数据处理、安全性和可扩展性等多个方面。理解并熟练掌握这些知识点对于成功开发出高效、安全的小程序至关重要。开发者需要不断学习和实践,以适应微信小程序...

    微信后台微服务架构及存储架构设计.docx

    8. **微信分布式文件系统**:微信开发了自己的分布式文件系统,以处理大规模的数据存储和检索需求,确保系统的扩展性和容错性。 9. **微服务架构框架**:微信采用了微服务架构,将复杂的应用程序分解为一组独立的...

    微信之道(讲述微信系统架构的PPT)

    《微信之道——揭示微信系统架构的秘密》 微信,作为全球用户量最大的即时通讯软件之一,其背后的技术架构无疑是众多IT从业者关注的焦点...这份资料对于理解大规模互联网应用的架构设计和技术实践具有很高的参考价值。

    微信Android模块化架构重构实践.pdf

    2. 微信架构历史回顾:文档中提到的微信-IALoEA架构的演变,从简单分层架构、多进程架构、到多子工程并行开发架构,可以看出微信在不断的发展过程中,如何根据自身产品特性和业务需求,对架构进行迭代和优化。...

    微信小程序设计开发文献14篇

    本压缩包包含14篇关于微信小程序设计与开发的文献,涵盖了从入门到进阶的各种主题,以下是这些文献可能涉及的知识点: 1. **基础概念**:了解微信小程序的基本构成,如页面(Page)、组件(Component)、样式...

    微信小程序的设计与开发.pdf

    微信小程序的设计与开发.pdf

    微信技术总监谈架构:微信之道——大道至简

    1. **基础组件的建设**:为了提高开发效率,微信开发了一系列基础组件,比如Svrkit、LogicServer和OssAgent等。这些组件简化了开发流程,使得开发者可以快速搭建和测试新功能。 2. **灰度发布**:采用灰度发布策略...

    微信开发小程序

    微信开发小程序是一个热门的技术领域,尤其对于前端开发者和移动应用开发者而言。这个实战项目旨在帮助具有大约一年开发经验的人深入理解和实践微信小程序的开发流程。本文将详细解析微信小程序的相关知识点,包括其...

    资源共享微信小程序 毕业设计大纲

    2.2 系统架构设计 前端采用微信小程序原生框架,结合Vue.js进行页面渲染,提升用户体验。后端采用Node.js进行开发,配合MySQL数据库存储和管理数据。API接口遵循RESTful原则,使用Express.js实现。环境部署借助...

    微服务在微信后台的架构实践36页.pdf

    1. 敏捷开发与统一基础架构:微信的后台架构设计强调敏捷开发,以快速响应市场变化。统一的基础架构和运营管理平台使得不同的微服务可以共享基础设施和平台服务,降低管理复杂度,提高运维效率。 2. 千级模块的庞大...

    微信技术总监分享架构设计理念

    ### 微信技术总监分享架构设计理念 #### 一、引言 随着移动互联网的迅猛发展,微信作为一款集社交、支付、生活服务于一体的超级应用,不仅在中国市场占据主导地位,也在全球范围内拥有庞大的用户群体。微信的成功不...

Global site tag (gtag.js) - Google Analytics