之前寫了一篇 支付寶支付開發
,現在總結一下支付寶退款的開發。
總體上來說,支付寶的退款接口分為即時到賬批量有密退款接口(refund_fastpay_by_platform_pwd)和即時到賬批量無密退款接口(refund_fastpay_by_platform_nopwd)兩種,分别對應前台請求和背景請求。
通俗說明一下前台請求和背景請求的差別:
前台請求:通過html的form表單方式送出的。
背景請求:直接通過背景互動,利用http請求發送到請求系統。
一、有密退款接口
及時到賬有密退款接口比較簡單,易于了解,相關字段到
支付寶網站檢視一般業務流程是:使用者發起退款請求->營運人員審批退款請求->同意退款->背景組裝退款封包(html)->重定向到支付寶退款頁面->營運人員輸入密碼->支付寶将退款結果異步通知到背景->背景完成剩餘背景邏輯。
** DEMO如下: **
使用者發起退款後,營運人員打開退款稽核頁面:

Paste_Image.png
确認可以退款後,背景組裝一個重定向的html到支付寶:
輸入密碼後支付寶向notify_url發送退款結果通知。
注:
組裝發送到支付寶的html封包樣例如下:
<html>
<head></head>
<body>
<form id="alipaysubmit" name="alipaysubmit" action="https://mapi.alipay.com/gateway.do?_input_charset=utf-8" method="post">
<input type="hidden" name="sign" value="簽名值" />
<input type="hidden" name="_input_charset" value="utf-8" />
<input type="hidden" name="sign_type" value="MD5" />
<input type="hidden" name="detail_data" value="201606132100100479^0.01^我要退款" />
<input type="hidden" name="service" value="refund_fastpay_by_platform_pwd" />
<input type="hidden" name="notify_url" value="退款通知位址" />
<input type="hidden" name="seller_user_id" value="值同partner" />
<input type="hidden" name="partner" value="合作商戶ID,需跟支付寶申請" />
<input type="hidden" name="batch_num" value="1" />
<input type="hidden" name="batch_no" value="20160613236648747861707090426379" />
<input type="hidden" name="refund_date" value="2016-06-13 07:57:12" />
<input type="submit" value="确認" style="display:none;" />
</form>
<script>document.forms['alipaysubmit'].submit();</script>
</body>
</html>
其中的detail_data為單筆資料集,規則見支付寶文檔。
需要說明的是:原付款支付寶交易号對應的是支付結果通知時的trade_no字段。
二、無密退款接口
無密退款接口的權限是不開放的,如果你需要的話,需要重新與支付寶簽約,有密接口是跟着支付一起的,你具備了支付的接口權限,就能用有密退款接口。
無密退款接口的流程比較簡單:使用者發起退款->背景組裝退款資料->通過http請求到支付寶背景->接收退款結果異步通知->背景完成剩餘背景邏輯。
無密接口有幾個概念說明如下:
- 充退:支付寶将退款退到買家支付寶賬号後,将錢再退到買家銀行卡的過程,也就是這裡是兩個過程:退到買家支付寶賬号,退到買家銀行卡。一般我們不關心這個,因為錢退到買家支付寶賬号後,錢已經退給買家了,至于能不能從買家的支付寶退到買家的銀行卡,一般不關心。
- 充退結果通知:充退到買家銀行卡成功的異步通知。
三、說明(遇到的坑)
- 無密接口流程比較簡單,一開始就開發了無密接口,結果發現沒簽約,沒權限。
- 無密接口請求位址:
注意到gateway.do後面的_input_charset的值為UTF-8,我們在請求封包中可能也會有_input_charset這個key,注意其value也應該為UTF-8,不能為小寫utf-8,否則驗簽不過,被坑了一天。https://mapi.alipay.com/gateway.do?_input_charset=UTF-8
- 最後
支付寶支付開發-退款