1 支付宝支付模块说明:
1.1 主要信息获取途径:
为了实现alipay功能,需要信息如下:
[a] APPID;[b] 商家私钥;[c] 支付宝公钥;[d] 支付回调地址;[e] 网关地址。
(1) 笔者采用支付宝沙箱测试获得信息[a]~[c]、[e];
(2) 为了实现有效地址[d],笔者将项目在服务器部署,同时整合了狂神说团队的接口;
(3) 为了模拟买家支付过程,笔者通过支付宝沙箱平台在手机上下载了虚拟支付宝。
1.2 数据库中主要整合过程说明:
(1) 数据库中有三张表:uesrinfo、iteminfo和orderinfo,其中userinfo用来存储用户登录信息;iteminfo用来存储商品信息;对于选中的指定商品,orderinfo用来在用户扫码支付后,存储关于该商品的订单信息。
1.3 代码中主要整合过程说明:
(1) 加依赖引配置请见源码。
(2) 从controller聊起:
在 ItemController 中,
1)如下代码段
// 支付单件商品
@GetMapping("payForItem")
public byte[] alipay(String itemid) {
// log.info("itemid=====>"+itemid);
PayVo payVo = new PayVo();
payVo.setItemid(itemid);
payVo.setUserId("1");
return alipayService.alipay(payVo);
}
将指定的商品id保存在payVo实例化对象中,而后调用Service层alipayService。
2)而后的代码段
public String notify_url(HttpServletRequest request) throws Exception {
// 1: 调用支付回调
boolean result = alipayCallback(request);
if (result) {
return "success"; // 请不要修改或删除
} else {
// 验证失败
return "fail";
}
}
用来接收支付宝的回调信息(回调的主要目的就是在数据库中存储订单信息)。
3) 在往下的alipayCallback方法中,引用了service层 payCommonService 实例化对象,该对象基于设计模式思想清爽地将用户分级(普通用户、VIP用户)再进行订单保存。
在 OrderController 中,如下代码段:
@PostMapping("/alipay/callback")
public R listenerCallback(@RequestBody PayVo payVo){
String userid = "1";
String itemid = payVo.getItemid();
Integer count = orderService.findOrderCount(userid,itemid);
return count > 0 ?R.ok():R.error();
}
目的是为了告知扫码支付的用户,指定的商品是否已被其购买(依据在订单表中查找某条数据是否存在的思维)。
(3) 在service层,AlipayServiceImpl文件用于支付二维码的生成。
2 基于Docker的服务器部署说明:
Step1:阿里云服务器中Docker的安装与启动:
# docker安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# docker启动
systemctl status | start | stop | restart docker
# 配置docker安装自启动
systemctl enable docker
# 建立docker组,并使用root用户
sudo groupadd docker
sudo usermod -aG docker $USER
# 重启docker服务
systemctl restart docker # 如果后续docker运行出了问题,可能重启会解决
# docker镜像加速,请参考不良人docker全家桶视频
mkdir login03demo
cd login03demo
将项目打成jar包(Maven->package),构建关于该jar包的Dockerfile文件:
FROM openjdk:8-jre
WORKDIR /app
ADD myproject3-0.0.1-SNAPSHOT.jar login03code.jar
EXPOSE 8989
ENTRYPOINT ["java","-jar"]
CMD ["login03code.jar"]
在 login03demo 文件夹下,执行如下命令
docker build -t login03test:01 . # 在分号前后分别是镜像名和版本号
docker images # 可见,jar包以被构建成镜像
而后执行如下命令:
docker build -t login03test:01 . # 在分号前后分别是镜像名和版本号
docker images # 可见,jar包以被构建成镜像
cd ~
mkdir login03
cd login03
在 login03 文件夹下,执行如下命令:
touch docker-compose.yml
编写docker-compose.yml文件(docker-compose是为了整合SpringBoot和MySQL)
version: "3.2"
services:
mysql: # 服务名
image: mysql:5.7 # 相当于 run --name
container_name: mysql # 使用哪个镜像, 相当于 run image
ports: # 用来完成host与容器端口的映射关系, 相当于 run -p
- "3306:3306"
volumes: # 完成宿主机与容器中目录数据卷共享, 相当于 run -v
- mysqldata:/var/lib/mysql # 使用自定义路径映射
- mysqlconf:/etc/mysql # 使用自定义路径映射
environment:
- MYSQL_ROOT_PASSWORD=1472
networks: # 代表当前服务使用哪个网桥, 相当于 run -network
- login03
login03test:
image: login03test:01
container_name: login03test
ports:
- "8989:8989"
networks:
- login03
volumes: # 声明上面服务所使用的自动创建的卷名
mysqldata: # 声明指定的卷名 compose自动创建该卷名,但是会在之前加入项目名
mysqlconf:
networks: # 定义服务用到的桥
login03: # 定义上面的服务用到的网桥名称 默认创建的是bridge
最后,在 login03 文件夹下指定
docker-compose up
即可在服务器上运行本项目。