课程介绍和项目的搭建
大纲介绍
微信支付项目效果演示
SpringBoot2.x的基础
开发环境 jdk8 idea maven git mysql
项目从零到上线的步骤和流程
需求调研到项目上线
需求评审(产品-设计-前端-后台-测试-运营)
ui设计-》开发(前端和后台架构开发)
前后端联调-》项目体侧-》bugFix-》回归测试
运维开发部署上线-》灰度发布-》全量发布-》维护和运营
功能点和系统架构的分析
首页视频列表、视频详情、微信扫码支付、我的订单
架构设计
前后点分离(方案:node渲染)
动静分离(方案:静态资源放到cdn或者nginx服务器上)
后端技术(springboot2.x+redis4.x+httpclient+mysql+activieMq)
前端技术(html5+bootstrap+jquery)
测试要求:首页和视频详情页qps单机qps 2000+
数据库设计和字段冗余
er图
字段的冗余
部分测试数据的导入
项目基础环境搭建和逆向工程构建
IntelliJ IDEA使用教程
相关偏好里开启自动编译
Shift+Ctrl+Alt+/,选择Registry
选 compiler.automake.allow.when.app.running 重启项目就可以了
开源工具的讲解和使用
pageHeper分页拦截器,tk自动生成工具,抽象方法的利弊
开源工具:
好处:开发方便,使用简单
使用PageHelper.startPage(page, size); 开启分页
弊端:对于分库分表等情况下使用有问题,深度分页逻辑判断会复杂
mysql资料和分页优化
深度分页:MySQL大数据量分页性能优化
MySQL 百万级分页优化(Mysql千万级快速分页)
封装的讨论和选择
关于抽象和不抽象的选择,比如tk这些工具,通用mapper,service,controller
代码量大大减少,开发新模块可以马上进行使用
对应过度封装,新手等比较难理
不能保证团队里面所有人都有对应的水平,或者有高度封装的思想,也不是过度封
装,项目通用工具使用缓存操作、切换缓存等。
在线教育视频站点核心业务开发
整合mysql加入mybatis依赖,加入druid数据源
mybatis - MyBatis 3
xml配置: mybatis - MyBatis 3
mybatis3.x注解方式,增删改查,控制台打印sql语句
控制台打印sql语句,用于本地测试
mapper代码编写
数据库字段和java实体类的映射配置
完善相关接口、协议规范讲解
save接口保存对象 @RequestParam(value = "page", defaultValue)int videoI 可以设置默认值,比如分页
)@RequestBody 请求体映射实体类,需要指定http头为 content-type为application/json charset=utf-8
统一入参协议
动态sql以及使用
Mybatis之动态构建SQL语句 - 叼烟斗的纤夫 - 博客园
基本原理:通过mybatis plugin 增加拦截器,然后拼装分页
jwt微服务下的用户登录权限校验
单机和分布式应用下的登录校验,session共享,缓存使用
session保存在浏览器和应用服务器会话之间
用户登录成功,服务端会保证一个session,当然会给客户端一个sessionId,客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId
分布式应用中session共享
使用redis存储token:
服务端使用UUID生成随机64位或者128位token,放入redis中,然后返回给客户端
并存储在cookie中
用户每次访问都携带此token,服务端去redis中校验是否有此用户即可
微服务下登录检验解决方案 JWT讲解 json wen token
jwt是一个开放标, 定义一种用于简介的用于通信双方以json对象形式安全传递信息的方法
token加密前的对象不应该包含敏感信息,如用户权限,密码等
jwt格式:header+payload+signature
头部:主要是描述签名算法
负载:主要描述是加密对象的信息,如用户的id等,也可以加些规范里面的东西
签名:主要是把前面两部分进行加密,防止别人拿到token进行base解密后篡改
jwt客户端存储
登录jwt实战通用方法
引入依赖
开发生产token的方法
开发校验token的方法
微信授权用户接口开发
登录方式优缺点和一键授权功能介绍
企业获取了用户的基本资料信息,利于后续业务发推送营销类信息
用户可以用个手机号或者邮箱获取对应的app福利注册送优惠券
反馈信息的时候方便,直接报手机号即可账户出问题,被盗等
步骤多
少量不良企业贩卖个人信息,如手机号
反馈问题麻烦,比较难知道唯一标识
普通密码和核心密码区分
微信扫一扫功能开发流程和资料准备
微信开放平台介绍(申请里面的网站应用需要企业资料)
什么是appid、appsecret、授权码code
appid和appsecret是 资源所有者向申请人分配的一个id和秘钥
code是授权凭证
区分角色 用户,第三应用,微信开放平台时序图知识讲解
微信扫码连url地址获取
增加结果工具类,JsonData; 增加application.properties配置
#微信开放平台配置
拼接URL
微信扫码回调本地域名ngrock讲解
为什么要用这个,微信扫码需要配置回调,需要配置对应的域名
在本地电脑开发,微信没法回调,所以需要配置个地址映射,就是微信服务器
可以通过这个地址访问当前开发电脑的地址
使用授权码code获取用户个人信息接口
通过code获取access_token
通过access_token获取微信用户头像和昵称等基本信息
开发User数据访问层,保存微信用户信息
微信回调 用户昵称乱码
nickname = new String(nickname.getBytes("ISO-8859-1"), "UTF-8");
插入数据库
获取openid后,查询是否有此用户,如果有则不发请求去获取用户信息
方法:保存用户,根据id查询用户,根据openid查询用户
用户授权登录后生成登录凭证重定向到页面上
获取当前页面访问地址
根据User基本信息生成token
重定向到指定页面
实战开发用户登录拦截器拦截器 LoginInterceptor
实现接口 LoginInterceptor implements HandlerInterceptor
重写preHandler
配置拦截器
响应前端数据
微信扫码网页支付的介绍和使用
微信商户平台,支付方式和使用场景,申请微信支付流程
支付方式 公众号支付,扫码支付,app支付,小程序支付
微信支付申请流程
微信网页扫码支付
扫码支付文档
名称理解
和微信支付交互方式
post方式提交 xml格式的协议 签名算法MD5
交易单位为 分
交易类型:JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付
安全规范:签名算法,校验工具
微信扫码支付之统一下单接口开发之订单增删改查
微信扫码支付时序图讲解和统一下单接口
时序图地址:
统一下单接口介绍
下单接口开发和微信支付签名生成开发,并设置微信回调地址
统一下单参数需要微信签名
下单接口开发和微信支付签名生成开发
调用微信统一下单接口实战,发送post请求,并获取响应转成map,获取交易会话的二维码链接code_url。
使用谷歌二维码工具根据code_url生成扫一扫支付二维码
使用Ngrock本地接收微信回调,并开发回调接口
微信支付回调处理之更新订单状态和讲解什么是接口的幂等性
微信回调通知规则(通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
幂等性: 同样的参数和值,不管调用你的接口多少次,响应结果都和调用一次是一样的
校验签名是否正确,防止伪造回调
查询订单是否已经更新
若没更新则更新订单状态
回应微信,SUCCESS 或者 FAIL