在线教育项目实战(微信支付)目录-上

大哥哪位知道,在线教育项目实战(微信支付)目录-上
最新回答
笑忘书

2024-09-26 00:47:12

课程介绍和项目的搭建


大纲介绍


微信支付项目效果演示


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