支付宝交易退款
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 交易超过约定时间(签约时设置的可退款时间)的订单无法进行退款。 支付宝退款支持单笔交易分多次退款,多次退款需要提交原支付订单的订单号和设置不同的退款请求号。一笔退款失败后重新提交,要保证重试时退款请求号不能变更,防止该笔交易重复退款。 同一笔交易累计提交的退款金额不能超过原始交易总金额。
注意:
-
同一笔交易的退款至少间隔3s后发起
-
请严格按照接口文档中的参数进行接入。若在此接口中传入【非当前接口文档中的参数】会造成【退款失败或重复退款】。
-
该接口不可与其他退款产品混用。若商户侧同一笔退款请求已使用了当前接口退款的情况下,【再使用其他退款产品进行退款】可能会造成【重复退款】。
-
退款成功判断说明:接口返回fund_change=Y为退款成功,fund_change=N或无此字段值返回时需通过退款查询接口进一步确认退款状态。
一、请求地址
https://kf.fw199.com/gateway/partner/pay/alipay/personal/trade/refund
二、请求参数
| 参数名 | 类型 | 说明 | 示例 |
|---|---|---|---|
| appid | String | 合作伙伴Id | |
| timestamp | String | 时间戳 | 请求时的时间,unixtime格式 |
| trade_no | String | 支付宝交易号 | 支付宝交易号,和商户订单号不能同时为空 |
| out_trade_no | String | 商户订单号。 订单支付时传入的商户订单号,商家自定义且保证商家系统中唯一。与支付宝交易号 trade_no 不能同时为空。 | |
| refund_amount | Int | 退款金额。 需要退款的金额,该金额不能大于订单金额,单位为分 | 100 |
| out_request_no | String | 退款请求号。 标识一次退款请求,需要保证在交易号下唯一,如需部分退款,则此参数必传。 注:针对同一次退款请求,如果调用接口失败或异常了,重试时需要保证退款请求号不能变更,防止该笔交易重复退款。支付宝会保证同样的退款请求号多次请求只会退一次。 | |
| refund_reason | String | 退款原因说明。 商家自定义,将在会在商户和用户的pc退款账单详情中展示 | |
| sign | String | 签名 | 对各参数使用提供的AppSecret进行签名,签名逻辑具体实现见示例代码 |
请求示例
@Testpublic void PayAlipayPersonalTradeQuery() throws Exception { Map<String, String> data = new HashMap<String, String>(); data.put("appid", Config.AppId); Long timestamp = System.currentTimeMillis() / 1000; data.put("timestamp", timestamp.toString()); data.put("trade_no","2023090622001464271436832807" ); data.put("sign", Utils.Sign(data, Config.AppSecret )); String result = doHttpRequest(Config.PayAlipayPersonalTradeQueryUrl,data); System.out.println(result);}三、接口返回结果
{ "code": 0, "message": "ok", "data": { "trade_no": "2023090622001464271436832807", "out_trade_no": "20230906115624999565", "buyer_logon_id": "sup***@163.com", "buyer_user_id": "2088002269364279", "fund_change": "Y", "refund_fee": "909", "store_name": "", "refund_detail_item_list": [ { "fund_channel": "ALIPAYACCOUNT", "amount": "3" } ] }, "trace_id": ""}四、返回参数说明
返回字段中code为0表示成功,非0失败,失败的话message会有失败原因。成功的往左,会有以下字段。
| 参数 | 类型 | 是否必选 | 最大长度 | 描述 |
|---|---|---|---|---|
| trade_no | String | 必选 | 64 | 支付宝交易号 |
| out_trade_no | String | 必选 | 64 | 商家订单号 |
| buyer_logon_id | String | 必选 | 100 | 买家支付宝账号 |
| buyer_user_id | String | 特殊可选 | 买家在支付宝的用户id | |
| fund_change | String | 必选 | ||
| refund_fee | String | 必选 | 11 | 退款总金额。单位:分。 指该笔交易累计已经退款成功的金额。 |
| store_name | String | 特殊可选 | 11 | 交易在支付时候的门店名称 |
| refund_detail_item_list | refund_detail_item_list[] | 可选 | 退款使用的资金渠道。 | |
| —– fund_channel | String | 必选 | 交易使用的资金渠道 | |
| —– amount | String | 必选 | 该支付工具类型所使用的金额。单位:分。 |