个人支付项目,已稳定收款 100+

97,136

自报家门:三哥、个人网站👉j3code.cn

对,没错,又趁着周末两天 + 几个工作日晚上熬夜开发了个支付项目出来,赞赏平台

我对这个项目的定位非常简单,就是一个买卖平台。平台内容由我来发布,免费内容大家只需注册即可观看,如需付费则支付相关费用方可查看。

下面是项目运行首页

Snipaste_2023-02-13_22-03-46.jpg

下面是项目登录注册页

Snipaste_2023-02-13_22-04-26.jpg

下面是商品支付页面

Snipaste_2023-02-13_22-05-38.jpg

虽然项目整体规模较小但也算是五脏俱全,有认证相关、有支付相关、也有分布式问题相关。对于没有做过个人项目特别是没做过支付项目的小伙伴来说,用来练手或者写在简历上都是未尝不可的。

那下面我来具体项目中几个重要的业务点。

1、网关认证

以前我们开发项目要进行认证基本都是通过在服务中写个拦截器,然后配置拦截器拦截所有的请求,最终通过拦截器的逻辑进行认证。这中方法不是不可以,但我觉得不好,如果我们项目中有三个微服务以上,那么这个拦截器的认证逻辑就会存在于每个微服务中,这是我认为的不好的点。

那我是怎么做的呢!

对,在网关服务里做认证动作。将认证动作迁移,因为我的个人项目是通过网关进行请求转发,所以,所有的请求都会先进入网关,再进入各个具体的业务服务,那问题就好办了。我直接通过实现网关的 GlobalFilter 接口拦截所有的请求,通过实现该接口进行认证逻辑处理,完成本平台的认证、续约、限流等功能。

下面来看看请求流程图

Snipaste_2023-02-13_22-30-46.jpg

2、支付逻辑

支付功能可以说是本项目的重中之重,需要有非常强的健壮性。因为我是一位个人开发者,所以不能对接需要有营业执照的支付功能,最终我选择了支付宝的当面付这一个功能。

当面付的好处很多,第一它不需要营业执照,第二对接也非常简单而且有支付宝封装的SDK,所以本人再对接的过程中没有费多少力气就把接口打通了。

主要就是对接了当面付的三个接口:

  1. 获取支付二维码接口
  2. 支付成功的回调接口
  3. 订单状态回查接口

当然,这三个接口的代码量也是很大的,所以本人为了通用就又对他做了一层封装,使得项目调用支付功能就更加简单了。如下就可以完成一个支付功能的完整逻辑:

Snipaste_2023-02-13_22-42-54.jpg

是不是很简单,如果需要代码的可以看文章末尾哦!

下面我来介绍一下本项目中付费内容的整个业务流程。

1、用户获取付费商品详情

2、点击查看内容,这里就有两种结果了

  • 第一种结果:商品已支付,直接显示内容给用户观看
  • 第二种结果:商品未支付,提示用户付款查看

3、当显示第二种结果时,如果用户点击付款,则进入后续流程

4、服务器请求支付宝第三方,获取对应金额的支付二维码,并将返回的二维码和用户绑定生成一个未支付的订单,最终将这个待支付二维码返回给页面

5、页面显示二维码之后,用户就需要进行扫码付款(打开支付宝APP扫码付款)

6、用户付款成功之后,支付宝第三方会自动回调第四步我给支付宝的回调地址。回调接口的逻辑就是将订单状态改为已支付并做一些后续的流程操作。

7、为了防止回调接口出问题,还写了一个定时任务,定时回查订单表中未支付订单的状态,循环请求支付宝询问支付支付成功并执行支付成功的相应回调逻辑。

支付业务流程图

Snipaste_2023-02-14_09-26-11.png

3、手写分布式锁

相信分布式锁大家都不陌生,无非就是向中间件中放入一个标志量,存在即表示已锁,反之则未锁执行相关逻辑。

说都会说,但要真正自己手写而且做到高可用确是一个非常困难的问题。其中非常关键的一点就是如何解锁,如何做到业务执行完成百分之百解锁,那我再项目中是如何考虑的呢!

我先来简单的说一下思路:

1、定义一个分布式锁注解,用来标注那些方法需要分布式锁加持

2、定义一个切面,逻辑就是给加上了分布式注解的方法进行增强

3、增强的逻辑为:加锁、生成续约任务、执行业务逻辑、解锁

4、另起一个延迟线程池,每隔一定时间遍历一次续约任务集合,判断任务是否需要进行续约(这个逻辑判断很多如:续约次数过多、业务已执行完毕、是否需要续约等等)

具体业务流程如图(我画的比较多)

Snipaste_2023-02-14_09-47-37.png

当然,为了方便你们理解,我还出了相关视频,地址:

www.bilibili.com/video/BV1jP…

以上,就是赞赏平台项目中三个比较大的亮点,不论是写在简历上还是当作个人项目都是一个非常不错的选择,那我也把这个项目搭建起来了,地址如下:

admire.j3code.cn

需要项目代码 + 视频 + 详细文档的,我都放在这个平台上了,自取即可。

我是J3code(三哥),咱们下回见