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); } 123456789
将指定的商品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"; } } 12345678910
用来接收支付宝的回调信息(回调的主要目的就是在数据库中存储订单信息)。
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(); } 1234567
目的是为了告知扫码支付的用户,指定的商品是否已被其购买(依据在订单表中查找某条数据是否存在的思维)。
(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全家桶视频 12345678910111213
Step2:Idea远程操作Docker如图1所示
Step3:通过MobaXterm远程连接服务器,
mkdir login03demo cd login03demo 12
将项目打成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"] 123456
在 login03demo 文件夹下,执行如下命令
docker build -t login03test:01 . # 在分号前后分别是镜像名和版本号 docker images # 可见,jar包以被构建成镜像 12
而后执行如下命令:
docker build -t login03test:01 . # 在分号前后分别是镜像名和版本号 docker images # 可见,jar包以被构建成镜像 cd ~ mkdir login03 cd login03 12345
在 login03 文件夹下,执行如下命令:
touch docker-compose.yml 1
编写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
1234567891011121314151617181920212223242526272829303132最后,在 login03 文件夹下指定
docker-compose up 1
即可在服务器上运行本项目。
相关知识
UIO辛可/Project1
千叔叔盯着你的花瓣个人主页
MaMo☿的花瓣个人主页
zzziaco的花瓣个人主页
xiaoyanmama98的花瓣个人主页
网址: Project1 https://m.huajiangbk.com/newsview849436.html
上一篇: 聚合支付系统,让在线交易更快,更 |
下一篇: 支付宝即时到账接口完整集成指南 |