项目概述:
汽车之家是为联车公司开发的o2o模式一个项目。它是以汽车为中心,提供汽车及二手车买卖和租赁的基本功能,还提供了车辆服务,相关周边配件物品购买,汽车相关知识学习等功能一个综合性平台。支持商家入驻,它主要有组织机构,租赁,用户,服务,车辆,订单,支付等模块。
它是使用前后端分离开发模式
前端使用的是VUE技术栈
后端使用的是Springboot+SSM+Docker
项目人员组成:
- PM 项目经理 1名
- SE架构师 1名
- UI 界面设计 1名
- H5 前端开发 2名
- JAVA 后端开发 4名
- 测试人员 1名
- 运维人员 1名
负责模块
1. 用户模块
- 用户注册 (技术点:摘要加密,短信消息,redis)
这个功能分为邮箱注册和手机号注册功能
邮箱注册: 通过用户的信息进行数据库查询,符合新用户条件后,进行登录表和用户表的保存,并状态设置为禁用状态,并同时发送一封激活邮件到指定邮箱以激活。
手机号注册: 点击发送验证码,后端进行判断,符合条件则生成验证码并将手机号作为key存放到redis同时设置3分钟有效期,再通过三方短信接口向该手机发送验证码,前端完成表单提交后,后端在进行信息校验,符合条件后存放用户信息到登录表以及用户表。
以上密码均使用MD5摘要加密技术加盐加密存放数据库 - 用户登录
前台用户可以通过手机号,邮箱以及用户名进行登录,前后端皆会进行非空校验,并拿到用户的salt值与输入的密码加密与数据库的密码进行匹配,匹配成功则生成token存放数据库并设置有效期为30分钟,再将token与用户信息对象返回前台,为了后端能够校验用户是否已经登录,只要用axios的请求都要携带token到后端。
三方登录-微信登陆流程:- 请求CODE:点击微信登陆 跳转到扫码页面
- 扫码用户允许授权后,将会重定向到redirect_uri的网址上 并带上code和state参数 redirect_uri?code=CODE&state=STATE
- 通过CODE获取access_token:callback页面钩子函数发请求到后端处理
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
正确的返回:
{
"access_token":"ACCESS_TOKEN", //接口调用凭证
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", //授权用户唯一标识
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
后台通过HttpClientUtils工具类发送请求返回的是json对象的字符串,需要转换为json对象
需要通过alibaba一个工具类进行转换fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
再拿到用户的openid与数据库进行查询,有返回则进行免密登录,生成token并将当前用户信息返回前台,没有匹配则跳转到绑定页面新建用户。
- 用户详情页:我的收藏、浏览足迹、用户地址管理、银行卡管理
2. 汽车服务模块
- 汽车管理
- 汽车类型管理(FastDFS)
基本的CRUD,可以让平台管理员以及店铺管理员管理相应产品。所有相关图片视频资源均通过FastDfs服务器进行存储下载。 - 发布二手车(技术点:集成百度地图)
用户可在网页上提交二手车信息,后台会根据用户所填写的地址进行经纬度解析,自动查询最近的店铺进行配对,对应店铺会派出工作人员与其进行进一步沟通。核实无误后,会将车辆信息发布到网站上进行展示,以供他人选购 - 车辆及车辆服务购买(技术点:Quartz定时器)
当用户点击购买车辆或者车辆服务时,会生成订单,如果是购买车辆,则生成支付单,以缴纳保证金成功为准,线下人员会对用户进行预约试驾。如果是服务购买,支付完成后,则会根据用户订单地址派出离该地址最近的店铺的工作人员进行上门服务,也可以选择用户到店消费,以用户订单为准。以上支付单的过期时间均由Quartz控制,超出规定支付时间则关闭订单。
3. 支付模块-支付宝支付功能
技术要点:
- 内网穿透
异步通知是支付宝以httppost请求方式来访问我们站点的某个controller方法,我们应用应能够被外网访问 - 摘要加密算法 MD5
实现: - 下载官方demo –
alipay.trade.page.pay-JAVA-UTF-8
- 导包
alipay-sdk-java
- 封装工具类及常量类
AlipayUtils.java
、AlipayConfig.java
、PayConstants.java
- 前台提交订单
this.$http.post("/productOrder/submit",this.order)
- 后台
ProductOrderController
接收 - service层创建订单及支付单 发起支付请求 通过工具类返回一个payData字符串
- 将payData通过Ajax结果返回给前台
- 前台动态innerHTML将结果添加至页面并提交
- 跳转到支付页面,支付完成后同步回调到支付成功页面,作回显
- 异步回调httppost 让ali访问自己controller,具体实现用demo的
notify_url.jsp
- controller进行验签及验证结果处理,成功则更新支付单为已支付,订单为待消费。