支付寶支付回調的坑點

梳理一下對接支付寶支付時回調踩過的一個坑。api

問題

時間過了一年再次收到一條來自支付寶的回調信息,結果被處理成支付成功的回調(還好後面的邏輯有對訂單狀態進行校驗,因此沒有流程上的漏洞)。數據結構

支付寶支付的回調

通知觸發條件

觸發條件名 觸發條件描述 觸發條件默認值
TRADE_FINISHED 交易完成 true(觸發通知)
TRADE_SUCCESS 支付成功 true(觸發通知)
TRADE_CLOSED 交易關閉 true(觸發通知)
WAIT_BUYER_PAY 交易建立 false(不觸發通知)

從上表可得出,當支付寶交易單的狀態被設爲 TRADE_FINISHED/TRADE_SUCCESS/TRADE_CLOSED 時,都會觸發一次回調通知異步

  • TRADE_SUCCESS
    TRADE_SUCCESS 的通知觸發條件是商戶簽約的產品支持退款功能的前提下,買家付款成功
  • TRADE_FINISHED
    TRADE_FINISHED 的通知觸發條件是:url

    • 1、商戶簽約的產品不支持退款功能的前提下,買家付款成功;
    • 2、商戶簽約的產品支持退款功能的前提下,交易已經成功而且已經超過可退款期限。

通知的地址

通知的地址是調用 alipay.trade.create (統一收單交易建立接口)時指定的回調地址 notify_url日誌

問題剖析

一年以後又收到一條通知,剖析日誌咱們發現:code

  1. 訂單恰好是通知消息日期的一年前
  2. 通知裏有兩個參數 trade_status=TRADE_FINISHED&refund_fee=0.00,也就是這個通知是由 TRADE_FINISHED 狀態觸發的
  3. 查驗後臺設置的可退款期限:一年
  4. 實證結論——這個問題是 TRADE_FINISHED 通知觸發條件的第二種狀況致使的

支付寶方面的問題:接口

  1. alipay.trade.refund 統一收單交易退款接口 沒有說起退款存在回調的狀況。而事實上退款以後(不管是全額仍是部分),都會觸發一次異步通知
  2. 支付寶的回調通知數據結構很是像,若是此次咱們不是在自身的訂單狀態上預先作判斷,可能此次咱們遇到的問題會致使財務風險

總結

綜上所述,支付寶支付的文檔雖然很全,可是寫得很亂,不少重要的點常常再也不重要的地方重點說明。對接的時候仍是要仔細且多考慮幾個方面,儘可能編寫健壯的有必定程度容災能力的代碼。ip

參考

https://opendocs.alipay.com/a...
https://opendocs.alipay.com/o...支付寶

相關文章
相關標籤/搜索