微信作为一款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也不差。
转载请保留出处,尊重原创,
相关推荐
微信红包的架构设计简介。学习高并发 装逼利器。
基于服务调度的微信公众平台开发架构设计与实现
在技术架构上,微信是如何做到的?日前,在腾讯大讲堂在中山大学校园宣讲活动上,腾讯广研助理总经理、微信技术总监周颢在两小时的演讲中揭开了微信背后的秘密。
微信小程序的设计与开发.pdf
景泰蓝工艺文化传播微信小程序的设计与开发.pdf
在技术架构上,微信是如何做到的?日前,在腾讯大讲堂在中山大学校园宣讲活动上,腾讯广研助理总经理、微信技术总监周颢在两小时的演讲中揭开了微信背后的秘密。分享开发设计理念,架构设计的盛宴。
混合式教学背景下生物化学习题微信小程序的设计与开发.pdf
本次讲座分享微信在敏捷项目开发和技术架构设计方面的经验,以及讲述如何在“敏捷”的同时,保持“海量服务稳定性”的简单原则。 ,腾讯大讲堂
目录 摘要 关键词 第一章 绪论 1.1 研究背景与意义 ...5.1 服务器端架构设计与实现 5.2 数据库设计与实现 5.3 接口设计与实现 第六章 系统测试与性能优化 6.1 系统测试方法与流程 6.2 系统性能优化 参考文献
家校微信小程序的设计和开发.pdf
去年7月,笔者在InfoQ举办的ArchSummit深圳2014的...这是微信Android客户端的第一个版本,软件架构采用早期标准的Android系统应用设计。【图1】第一个版本是两个人用了一个多月的时间开发出来的,其中一个还是刚刚毕业
**项目名称:** 微信小程序基于SSM平台开发的微信微服务架构汽车租赁系统 **项目功能介绍:** 本汽车租赁系统致力于通过微信小程序为用户提供便捷、高效的租车体验。系统采用SSM(Spring、SpringMVC、MyBatis)...
2.3 微信小程序的架构与组件 2.4 微信小程序的生命周期与事件 第三章 校园打卡系统设计 3.1 系统需求分析与设计 3.2 系统功能模块设计 3.3 系统数据模型设计 3.4 系统界面设计 第四章 微信小程序校园打卡实现 4.1 ...
分析系统逻辑结构,从微信端、微信API接口、服务器三部分设计出系统的 整体架构,从学员、教师、系统管理员三个角色出发,设计每个角色的功能结构 及功能模块间的联系,实现系统总体功能设计 适合人群:具备一定...
针对微信小程序开发的技术特点,开展课程设计和课程组织,建立教学模块,改进教学方式,创新有效的教学模式,开展教学评估,鼓励更多专业人才掌握微信小程序开发技术,满足社会需求。文章阐述了创建课程的目标,并运用项目化...
微信小程序项目实例、开发实例,可做计算机毕业设计、课程设计等参考。 【项目技术】 微信小程序开发工具+mysql+java+b/s 【实现功能】 服务端: 后台首页:可以直接跳转到后台首页。 用户信息管理:管理所有申请...
**项目名称:** 微信小程序微信微服务架构的汽车租赁系统 **项目功能介绍:** 本汽车租赁系统基于微信小...同时,系统采用微服务架构,具备良好的扩展性和可维护性,便于二次开发定制,满足企业不断发展的业务需求。
电子商务平台在各类农产品的推广中具有重要作用,为了进一步提高电商平台的易用性,设计开发微信电商小程序,有利于产业的创新发展与转型,使农产品能够更加准确的面向消费者,推动农产品电商的个性化和特色化发展。...
基于微信小程序的田间作物管理系统开发与应用.pdf
6.4.5微信身份体系设计 33 6.4.6携带令牌访问下单接口的原理 34 6.4.7实现 token 令牌的生成及发放及管理 35 6.4.8token 写入缓存 37 6.5 微信支付 37 6.6 订单管理 41 6.6.1 事务与锁在订单(库存量)检测中...