支付宝转账接入

来源:https://cloud.iocoder.cn/pay/alipay-transfer-demo/

0. 概述

yudao-module-pay-server 模块的 demo 模块,我们提供了一个 转账 接入的示例(PayDemoWithdrawController)。

它支持如下支付(转账)渠道:

疑问:为什么不支持微信转账呢?

因为 demo 是使用 PC 网页提供示例,而微信转账流程依赖微信公众号、小程序等,所以不太好支持!

如果你有这方面的诉求,可以阅读 《微信转账接入》

下面,我们以 demo 模块为例子,讲解如何接入支付宝的转账功能。

1. 第一步,配置支付渠道

① 在 [支付管理 -> 应用信息] 菜单,新建 demo 模块使用的支付应用。如下图所示:

应用信息

因为 demo 模块的支付应用默认已经创建,所以你可以直接使用。注意,这里的应用标识 “demo” 稍后会使用到。

疑问:为什么应用上有回调地址,然后 application.yaml 配置文件中也有 yudao.pay.transfer-notify-url 回调地址呢?

请详细阅读 《支付手册 —— 功能开启》 的「3.5 支付回调【重要】」小节。

简单来说:

因为内部会有多个业务模块,所以它们每个都有自己的回调地址,就是配置到对应的支付应用上!

② 点击“示例用户”对应的【支付宝 PC 网站支付】,进入支付渠道的配置。如下图所示:

支付渠道

友情提示:

如果你还没有支付宝开放平台的账号,可以先参考 《沙箱环境》 文档,申请一个测试账号,我目前就是这么测试的。只需要阅读该文档的如下小节即可:

沙箱环境

最终在 沙箱应用 可以看到支付渠道的配置。

2. 第二步,实现转账调用【重要】

友情提示:由于 demo 模块的转账接入已经实现,这里你只要看懂什么意思即可,不用操作。

① 【后端】在 demo 模块所在的 yudao-module-xx-biz 模块的 pom.xml 文件,引入 yudao-module-pay-api 依赖,这样才可以调用到 PayTransferApi 接口。代码如下:

    <dependency>
        <groupId>cn.iocoder.cloud</groupId>
        <artifactId>yudao-module-pay-api</artifactId>
        <version>${revision}</version>
    </dependency>

② 【后端】在 demo 模块的转账逻辑中,需要调用 PayTransferApi 的 #createTransfer(...) 方法,创建转账单。如下图所示:

图片纠错:最新版本将 yudao-module-pay-biz 子模块,重命名为 yudao-module-pay-server 子模块,更好表达它是一个服务

调用 PayOrderApi

3. 第三部,实现回调接口【重要】

友情提示:由于 demo 模块的转账接入已经实现,这里你只要看懂什么意思即可,不用操作。

demo 模块所在的 yudao-module-xx-biz 模块,实现一个转账回调的接口,提供给支付【中心】回调。对应的代码在 PayDemoWithdrawController 的 #updateDemoWithdrawTransferred(...) 方法中,如下图所示:

实现回调接口

4. 第四步,转账功能测试

至此,我们已经完成了转账接入的所有步骤,接下来,我们来测试一下转账功能。

① 打开 [支付管理 -> 接入示例 -> 提现转账案例] 菜单,点击【创建示例提现单】按钮,创建一个提现单。如下图所示:

创建示例提现单

此时,只是创建了一个提现单,并没有调用 PayTransferApi 发起转账。

② 创建完成后,点击该提现单的【发起转账】按钮,发起转账流程。如下图所示:

发起转账

此时,才会调用 PayTransferApi 发起转账,而在 pay_transfer 表中,会新增一条转账记录。

然后,它的转账状态会变为【转账中】。刷新几次列表,可以看到转账状态变为【转账成功】或者【转账失败】。

③ 转账完成后,先是支付【中心】的回调接口被回调,然后是 demo 模块的回调接口被回调。如下图所示:

转账回调

至此,我们已经完成转账接入的测试流程,可以试着多多 debug 调试整个流程,并不复杂噢。