Skip to main content

用户支付流程解析

支付流程

1. 用户发起支付

当用户抢到票后,开始发起订单支付请求,假设选择支付宝作为支付方式,支付流程如下。

2. 支付结果回调

当用户支付完一笔订单,支付宝付款渠道接收到支付结果后,对请求支付的系统进行支付结果回调。参考上图红色字体流程。

支付配置

1. 内网穿透

支付宝回调的地址一定要是在公网可以访问的。试想下,如果我们提供本地地址,支付宝肯定是访问不到的。

最好的方式就是部署到公网可访问的云服务器上。但是为了本地联调方便,我们可以把本地的开发环境网络配置成公网可访问,这就需要用到内网穿透技术。

比较常用的有 Natapp 工具,接下来我们需要通过 Natapp 开通内网穿透,开通教程详细查看下述官方文档:https://natapp.cn/article/natapp_newbie

开通后,将内网穿透端口改为 9000,即网关服务项目端口。

2. 替换支付回调地址

按照 Natapp 教程,本地启动客户端,我这里展示下 Mac 系统的启动结果。

http://3mb4zt.natappfree.cc 也就是我启动的内网穿透地址,访问这个地址会被请求到我们的 127.0.0.1:9000 服务端口上。

注意,这个内网穿透地址并不是固定,当你电脑锁屏再打开后它自己也是会变,或者你退出再启动也会变。

将 Natapp 内网穿透地址替换 application.properties 文件下 pay.alipay.notify-url 属性。

如果你是启动的 SpringBoot 单体版就修改 aggregation-service 服务下 application.properties 文件,反之修改 pay-service 服务下配置文件。

3. 获取公私钥

根据支付宝沙箱环境接入手册获取公私钥:https://opendocs.alipay.com/common/02kkv7

从【后端开发过程使用沙箱】章节开始看,看完步骤一,知道如何获取公私钥即可。

另外,需要确保电脑网站支付是已生效状态。

将支付宝公钥复制并替换 pay.alipay.alipay-public-key,应用私钥(JAVA语言)替换 pay.alipay.private-key

发起支付

1. 选择列车购票

选择 G35 列车进行用户购票操作。

2. 提交订单

选择乘车人,选择席别后提交订单。

根据乘车人选择好席别后,点击确认进行订单。

3. 支付宝付款

在订单确认页面选择网上支付。

当前只对接了支付宝的沙箱环境,所以选择支付宝进行支付。

账户名和支付密码从支付宝的沙箱环境页面获取。左侧菜单有个沙箱账号,买家信息中的买家账号以及登录密码对应一下账户名和支付密码。

有概率会让输入支付宝密码,同样从沙箱账号菜单,查看买家信息中的支付密码,点击确认付款按钮。

4. 支付回调

当支付宝请求付款成功后,会返回成功付款请求结果。

当返回支付成功结果后,咱们支付服务回调接口也会接到对应的支付宝回调请求。

跳过 Debug 模式后,查看数据库支付表和订单表的记录状态,都会进行相应变更,也意味着一笔订单购票全流程顺利结束。

如果大家自己搞过微信支付或者其它支付方式,可以在现有代码上进行扩展。目前的支付渠道使用了策略模式支持非常好的扩展性,基本上不用改动现有代码,新增加支付实现类即可。