支付寶接入文檔中TRADE_SUCCESS和TRADE_FINISHED的本質區別

以前一直不知道這2種狀態到底有什麼不一樣。支付寶中擔保交易和即時到帳交易對其的描述爲:網站

  • TRADE_SUCCESS  交易成功(或支付成功)
  • TRADE_FINISHED    交易完成

一頭霧水。。。。。。OK,找例子來講明吧:接口

例子一:支付寶

  • 即時到帳普通版。   普通版不支持支付完成後的退款操做,即用戶充值完成後,該交易就算是完成了,這筆交易就不能再作任何操做了。
  • 即時到帳高級版。   這個版本在用戶充值完成後,賣家能夠執行退款操做進行退款,即該交易尚未完全完成,賣家還能夠修改這筆交易。

OK,開測。當用戶在支付寶網站上充值完成後,這個時候支付寶的通知消息中,若是是即時到帳普通版,那麼這時的交易狀態值爲:  TRADE_FINISHED;若是是即時到帳高級版,此時的交易狀態值就爲:TRADE_SUCCESS。請求

我第一次接入的時候在我網站中判斷用或來作,即若是是交易成功或者交易完成則發貨。這時就錯大了。。。。。。由於做爲即時到帳高級版,在TRADE_SUCCESS完成後過了三個月,支付寶又會主動再推送一個消息爲TRADE_FINISHED。因此若是我用以上的邏輯來作發貨,那麼我接入即時到帳高級版的話,就會發貨2次。支付

這個問題是由於我沒有完全理解清楚這2種關係形成的。推送

仔細琢磨了一下,發現了它們二者最本質的差異。TRADE_SUCCESS狀態表明瞭充值成功,也就是說錢已經進了支付寶(擔保交易)或賣家(即時到帳);這時候,這筆交易應該還能夠進行後續的操做(好比三個月後交易狀態自動變成TRADE_FINISHED),由於整筆交易尚未關閉掉,也就是說必定還有主動通知過來。而TRADE_FINISHED表明了這筆訂單完全完成了,不會再有任何主動通知過來了。消息

綜上所述,收到TRADE_FINISHED請求後,這筆訂單就結束了,支付寶不會再主動請求商戶網站了;收到TRADE_SUCCESS請求後,後續必定還有至少一條通知記錄,即TRADE_FINISHED。因此,在作通知接口時,切記使用判斷訂單狀態用或的關係。版本

相關文章
相關標籤/搜索