最近发现的一个支付宝退款接口的坑,记录一下
支付宝的退款是通过调用 alipay.trade.refund
(统一收单交易退款接口)接口实现的,详情见官方文档
开发过微信支付的同学都知道,微信退款是有回调通知的,但是支付宝的退款接口文档上没有说明是否有退款通知,一开始我以为没有退款通知,因为在调用申请退款接口时就直接把退款的相关参数给返回了,例如退款金额,退款时间等字段;后来我才发现原来支付宝是有退款通知的,下面是退款的两种情景:
-
全额退款:我测试是没有退款通知的,并且全额退款后,订单的交易状态会变为交易关闭(
TRADE_CLOSED
) -
部分退款:一定会触发异步通知,那么肯定会有同学问了,这个异步通知地址是在哪里设置的呢?其实这个异步通知的地址就是调用
alipay.trade.create
(统一收单交易创建接口)时指定的回调地址
那么问题又来了,退款的回调地址和支付时的回调地址是同一个,我怎么来区分这个回调是支付还是退款呢?退款的异步通知参数中一定会返回 out_biz_no
(商户订单号)、refund_fee
(本次退款金额)、gmt_refund
(退款时间)
支付回调参数
{
"gmt_create": "2023-12-07 09:15:37",
"charset": "UTF-8",
"seller_email": "18215476233@163.com",
"subject": "?????????",
"sign": "qZ1x03ZZ0Z0nMF9HrzG6+qdd1snWcB0ZFS9Ig4RNHgrXZ42+C9iDqbOaswACP2xFty0BnnNtq+Vf0hcWFWlQgHp7Vho6VIBbSXhmMEE7+jc9y9r3wtgFA679pGMeqwAOBfDulbXoAm56VDW/AqhZeEgxbAYNoSlwXSPTrig5u3xTuCwCk3PQT2E9lfPSYJtF492JroHzaFXWyyjoTgtZvH69ZTIaI9S38imiXBA/ldDsWZxRBfy3N8KtcjhRcPfL5N11I54CKymsVRsXlnd3f+J3DHqPk5dpme06APnw+Msn9bF1hawGqHvXta4dNeJ3QsDdag7SEKOSSRPNGEjeGg==",
"body": "?????????",
"buyer_id": "2088722545315134",
"invoice_amount": 2.00,
"notify_id": "2023120701222091537015131441225493",
"fund_bill_list": [{
"amount": 2.00,
"fundChannel": "ALIPAYACCOUNT"
}],
"notify_type": "trade_status_sync",
"trade_status": "TRADE_SUCCESS",
"receipt_amount": 2.00,
"buyer_pay_amount": 2.00,
"app_id": "2021004100668293",
"sign_type": "RSA2",
"seller_id": "2088641118359383",
"gmt_payment": "2023-12-07 09:15:37",
"notify_time": "2023-12-07 09:15:38",
"version": "1.0",
"out_trade_no": "2023120709064019667954",
"total_amount": 2.00,
"trade_no": "2023120722001415131432901279",
"auth_app_id": "2021004100668293",
"buyer_logon_id": "173****8663",
"point_amount": 0.00
}
退款回调参数
{
"gmt_create": "2023-12-07 09:15:37",
"charset": "UTF-8",
"seller_email": "18215476233@163.com",
"subject": "?????????",
"sign": "W6h8zRl5mmgrXtjrMrjUu1PtUREcg++GWEZsgDyxdMNvQCpIaMqHeEgmObgKoj3g1n8hUStxHyuMcex6w9ZYSby8s2Hi3PEKeqLkg/5msC7S9aQiPwAwarRz65gkuxAO8jcpe8SV0WPXiZxP7nCI0v3MXe9gVdIDVgklha2zc7gAwxNAkZO72qnwq9IsbusDE6seT5qrqMuGG2jeHY6uhZwz2IBZ2ShDRov9jZCulJjArombEwg92cgIHklG17Pf1PvJwkSlA7V4pTqfoYytYkfFisBs2Gwu+UOVxRvX1pcLYHqNlHRxy2O8D8WJKWcrbXVa7fu+rZwaw5+2Ib2VcQ==",
"body": "?????????",
"buyer_id": "2088722545315134",
"notify_id": "2023120701222091928015131440521146",
"notify_type": "trade_status_sync",
"trade_status": "TRADE_CLOSED",
"app_id": "2021004100668293",
"sign_type": "RSA2",
"seller_id": "2088641118359383",
"gmt_payment": "2023-12-07 09:15:37",
"notify_time": "2023-12-07 09:19:28",
"gmt_refund": "2023-12-07 09:19:27.993",
"out_biz_no": "2023120709064019667954",
"version": "1.0",
"out_trade_no": "2023120709064019667954",
"total_amount": 2.00,
"refund_fee": 2.00,
"trade_no": "2023120722001415131432901279",
"auth_app_id": "2021004100668293",
"gmt_close": "2023-12-07 09:19:27",
"buyer_logon_id": "173****8663"
}