甲方给出的大致需求是做一个移动端 H5
的活动网站,需要实现微信登录、在线点播视频,抽奖、奖品发放等功能,但距离甲方的活动上线的时间只有7天左右,所以还需要考虑是否能在这个时间区间内实现所有的需求。
经过需求的梳理以及参考类似的产品过后,得出可能会遇到一些难点(没有动手实现过的需求)例如对接一些微信的API、视频在线点播、微信红包自动发放等。但这些都是在可以接收的范围内的,查文档查案例,边学边做,顺便也可以将近期所学得的知识点用在该项目当中来。0x02:需求分析
甲方给出的活动流程如下:
开发周期:7
天时间实现所有需求,第 8
天早上上线,活动持续 4
天时间,第 11
天下午活动结束。
redirect_uri
中的 URL
,也就是我们的后端的用户登录接口,并且会携带用户的 tempcode
tempcode
并使用 tempcode
去获取用户的 access_token
等信息,获取成功后微信会返回 access_token
以及用户的 openid
、unionid
等信息(公众号需要绑定微信开发平台才能获取到unionid
,unionid
可以作为该微信号的唯一标识)JWT
令牌信息。playauth
才能进行播放,后端使用 spring task
开启定时任务,每隔一段时间向阿里云 vod
服务获取新的 playauth
(playauth 默认的过期时间为7200秒,所以我们需要提前一些时间去更新)id
以及 playauth
访问阿里云VOD服务,获取该视频的播放流。jwt
令牌是否合法(防止接口薅羊毛的人恶意调用)令牌校验通过后将接收到验证信息后再次向验证码服务请求校验。A
进入海报分享页面,前端以携带用户 ID
的链接作为参数生成一个二维码,点击生成海报,生成图片。B
扫描用户 A
分享海报中的二维码,访问用户 A
的分享链接并且要求用户B进行微信授权。B
同意授权,在微信授权接口的 state
参数中携带用户A的 userid
作为 friendid
,并重定向至后端登录接口B
的微信信息,根据用户的 openid
判断该用户是否为新注册的用户,如果是则根据携带的friendid
为用户 A
增加一次邀请积分。JWT
令牌信息,为用户B重定向至活动主页。具体的实现思路以及伪代码的过程都写在了思维导图中。
https://www.processon.com/view/link/5ee39247f346fb1ae55ef6d3
技术、框架 | 说明 |
---|---|
Vue | 前端框架,MVVM 模式的实现者 |
Vue CLI | Vue 脚手架,基于 NodeJS |
Vue Router | Vue 路由框架 |
Vuex | Vue 全局状态管理框架 |
Webpack | 用于将Vue工程打包为单页应用进行部署 |
Axios | 前端 HTTP 框架 |
Vant UI | VantUI 是有赞开源的一套基于 Vue 2.0 的 Mobile 组件库。通过 VantUI 组件库,可以快速搭建出风格统一的页面,提升开发效率。 |
SCSS | Sass 是成熟、稳定、强大的CSS预处理器,而SCSS是Sass3版本当中引入的新语法特性,完全兼容 CSS3 的同时继承了Sass强大的动态功能。 |
TCaptcha.js | 用于Web 端快速接入腾讯验证码,适用于每次都需要进行人机验证的场景(登录、注册、下发短信、活动等)接入文档 |
Aliplayer.js | 阿里云播放器SDK |
Shake.js | 实现微信摇一摇功能,IOS端需要提供运动权限 |
Vueqr.js | 用于前端生成二维码 |
html2canvas | 指定dom生成图片流,用于生成图片分享。 |
技术、框架 | 说明 |
---|---|
Spring Boot | Spring Boot 是新一代 JavaEE 开发标准,本项目中使用 Spring boot 2.2.X 作为后端开发框架 |
Spring Task | 使用 Spring Task 对阿里云 vod 视频播放的认证信息进行定时更新,保证用户能够正常获取视频信息。 |
Mybatis Plus | Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,用于简化 MyBatis 操作,一些常用的单表操作我们则直接使用Mp提供的API来进行,而复杂的多表操作我们任然是编写sql语句使用原生 Mybatis 来执行,们用到的版本是 3.3.2 , 依赖包内集成了 Mybatis 3.5.4 |
MyBatisGenerator | Maven 插件,用于 MyBatis 相关代码生成 |
MybatisCodeHelper | Intellij IDEA 插件,用于 MyBatis 相关代码生成 |
jjwt | 用于快速生成、校验JWT令牌。 |
Swagger2 | 自动生成接口文档,用于后端接口调试以及提供给负责前端的老板调试页面。 |
Maven | 项目依赖、版本管理 |
Docker | 容器化引擎。用于快速部署应用程序 |
Docker-maven-plugin | maven打包插件,自动将maven项目打包为 docker 镜像 |
aliyun-java-sdk-vod | 提供阿里云视频点播服务的API的相关操作规范 |
tencentcloud-sdk-java | 用于快速接入腾讯云产品 API。本项目中用于接入腾讯滑块验证码 |
前端页面设计与实现的工作由 邓老板 负责
用户抽中现金红包后,后端返回一个重定向的请求,为用户重定向至红包代发平台的领取地址,领取成功后,代发平台又为用户重定向至我们的中奖页面,并显示用户的中奖金额,如下图
同时用户的微信消息中会收到一个服务通知,如下图所示
点击服务通知可以看到红包代发平台的领取消息,并且我们可以自定义一些活动的信息
点击领取红包,红包会自动存入我们的微信零钱当中,如下图
nginx
的一些模块来限制 IP
的某个时间内的 请求频率,再配合 iptables
进行访问控制,还有 行为验证码、令牌校验等机制(使用滑块等行为验证码可以大幅度的提高羊毛党的成本,也能最大程度的减少用户体验的损耗)但由于甲方的活动在几天内就要上线,我们需要在短时间内实现所有需求,没有多余的时间去考虑这些问题,当然,这也是因为我们这方面经验,否则这些在开始的时候就应该安排人手去着手准备,导致上线后被羊毛党使用爬虫脚本配合代理池来高频的访问我们的后端接口导致我们的带宽被占用,影响正常用的访问。再次感谢 邓老板 的陪同作战 150
多个小时(上线当天两个人连续作战 40
多个小时没有休息)项目最后能够顺利交付离不开队友的积极配合与支持,虽然上线当天还是出了一些状况,但是整体来说还是很好,通过本次项目也收获到了不少实际开发中的经验。
day4的上午,开始对微信登录的逻辑进行分析,查阅微信开放平台对于网站应用开发的文档,预期是使用之前审核通过的 “网站应用” 进行相关的开发
经过测试后发现,在开放平台提供给 “网站应用” 文档内的 "微信登录开发指南" 只能实现PC端的二维码扫码登录,而并不适用于移动端H5的需求(移动端的需求应该是打开网页后直接弹出授权请求)
PC端扫码后提示授权
移动端直接提示授权
经过资料的查阅,以及在询问经验丰富的大哥,最后在 segmentfault
提出的问题 得到了答复,最终确认了移动端 H5
网站要想实现微信登录授权,必须通过微信公众号来进行,而微信开发平台上的 “网站应用” 只适用于PC端网站进行扫码登录。微信为每个用户提供了公众平台的 测试账号 ,但API操作上有次数和频率的限制,并不适用于投入生产使用。
下午,最后还是把甲方的公众号权限要了过来,交付相关的权限后查阅 微信开放文档 进行相关流程的测试,最终实现了微信登录授权到信息获取的全过程,满足了该项目的需求,接下来是对整个后端的登录、校验流程的设计。整个下午都在使用思维导图对流程进行设计,没有进行实际的编码操作。
晚上,继续完善了登录流程的设计,整打算进行实际的编码,然后想到跟邓老板先讨论一下这个登录设计逻辑有无问题,经过分析后发现,设计的流程当中需要频繁的访问微信的授权 API
获取用户信息,且根据我们的需求,有更高效的方案,经过2个多小时的讨论后,最终决定使用 JWT
来实现无状态的令牌校验,既能防止用户对令牌进行篡改,也能实现令牌自动失效的需求,而无需再将令牌储存到 redis
内进行过期校验。
参考文档
https://blog.csdn.net/liyyzz33/article/details/89945844
配置实时刷新
https://www.jianshu.com/p/b134995ae16c
效果图
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有