最近发现的一个支付宝退款接口的坑,记录一下
支付宝的退款是通过调用 alipay.trade.refund
(统一收单交易退款接口)接口实现的,详情见官方文档
开发过微信支付的同学都知道,微信退款是有回调通知的,但是支付宝的退款接口文档上没有说明是否有退款通知,一开始我以为没有退款通知,因为在调用申请退款接口时就直接把退款的相关参数给返回了,例如退款金额,退款时间等字段;后来我才发现原来支付宝是有退款通知的,下面是退款的两种情景:
-
全额退款:我测试是没有退款通知的,并且全额退款后,订单的交易状态会变为交易关闭(
TRADE_CLOSED
) -
部分退款:一定会触发异步通知,那么肯定会有同学问了,这个异步通知地址是在哪里设置的呢?其实这个异步通知的地址就是调用
alipay.trade.create
(统一收单交易创建接口)时指定的回调地址
那么问题又来了,退款的回调地址和支付时的回调地址是同一个,我怎么来区分这个回调是支付还是退款呢?退款的异步通知参数中一定会返回 out_biz_no
(商户订单号)、refund_fee
(本次退款金额)、gmt_refund
(退款时间)
支付回调参数
{
"gmt_create": "2020-05-22 16:44:26",
"charset": "utf-8",
"seller_email": "xxxx@xxx.cn",
"subject": "xxxx",
"sign": "VEVT+QbX73V3DG07Z1cFPcwR23D3jwKsv7tBT7ig1z1WRty4yUoEdyfcckVp6r1Bgkj33LE+dsRNio89bJnrQzNrBVG7jcK4qB4+UMEALFE5GtS7zYv3p5a4k4gKYzdfWP7y2jmWV5aHpPC3DvvJ3zwUZn67etrbgMwjlTf3PVXpSUd6Uf4xz\/UPwUtTX65hTHNmj0xUwbDHcO69wz9rSLC6gu92Mdq0IGLbKRGcXAc0iemln2FzeLYLs3TGROMYR2W5tmh49cac5mUHIOS3QbD73lFQoZ0tS9L+ou7zhVkPQu5CMpdsySThHYOqxf\/RSi9vLitaEkg7a+bm83B3pw==",
"bu