最近在接支付寶的支付相關功能,用到非同步通知比較多,也比較容易出現問題。 這裡總結了一下支付寶非同步通知的相關內容,希望能對大家有所幫助。 一、什麼是非同步通知 非同步通知是指支付寶通過主動向開發者發送消息通知的方式來告知商家目前交易變更的情況。 支付寶建議主要通過這種方式來確定實際的交易狀態,實際是通過 ...
最近在接支付寶的支付相關功能,用到非同步通知比較多,也比較容易出現問題。
這裡總結了一下支付寶非同步通知的相關內容,希望能對大家有所幫助。
一、什麼是非同步通知
非同步通知是指支付寶通過主動向開發者發送消息通知的方式來告知商家目前交易變更的情況。
支付寶建議主要通過這種方式來確定實際的交易狀態,實際是通過 POST 的方式去發送通知的。
二、如何設置非同步通知地址
既然是支付寶主動通知,需要預先給到支付寶提供一個通知的地址,而根據不同的產品,非同步通知的地址設置的也不同,主要分為以下兩個情況:
- 通過介面參數配置的非同步通知地址
- 通過平臺配置的非同步通知地址
通過介面參數配置的非同步通知地址
使用場景:交易類收單產品,例如當面付、手機網站支付等
配置方式:在介面的 notify_url 參數中設置接收的地址 [如何設置notify_url]
地址要求:能正常訪問(http 狀態為 200)
介面是否支持非同步通知就看對應的介面文檔參數裡面是否有 notify_url 參數。
通過平臺配置的非同步通知地址
使用場景:資金營銷類產品,例如轉賬到支付寶賬號、商家券、螞蟻門店等
配置方式:在開發應用下的應用網關里進行地址配置 [如何設置應用網關]
地址要求:能正常訪問(http 狀態為 200)
⚠️ 特別說明:需要先對消息通知進行訂閱操作,不訂閱不發哦 [如何訂閱螞蟻消息]
三、非同步通知如何觸發
支付寶的非同步通知也不是你想要就能給你發的,他發送的邏輯主要是按照該事件是否達到了某個【狀態】。
對於交易類的產品,支付寶統一設定了交易狀態,針對不同產品的狀態有基本是否發送配置,下麵將對各類交易狀態進行逐一介紹。
支付寶交易狀態說明
支付寶給訂單設置了四個交易狀態,分別為:
- WAIT_BUYER_PAY(交易創建,等待買家付款)
- TRADE_SUCCESS(交易支付成功,可退款)
- TRADE_FINISHED(交易結束,不可退款)
- TRADE_CLOSED(未付款交易超時關閉,或支付完成後全額退款)
經驗分享:交易成功(TRADE_SUCCESS)和交易結束(TRADE_FINISHED)的區別在於是否可以退款,這個怎麼理解呢?
關鍵點在於這筆交易 是否允許退款 或者是 允許多久時間內可以退款。
如果交易是不允許退款的交易,訂單的交易狀態會直接變為交易結束(TRADE_FINISHED),並不會經過交易成功(TRADE_SUCCESS);
如果是允許6個月內退款的,在交易成功之後的6個月後才會由交易成功(TRADE_SUCCESS)變為交易結束(TRADE_FINISHED)。
因為這個邏輯,就會出現一些奇奇怪怪的問題 (。_ 。) 例如:
支付寶交易狀態觸發條件
那麼,是所有的狀態都會發送嗎?可不可以不發送?
當然不是所有狀態都發送的,比如交易創建,等待買家付款(WAIT_BUYER_PAY)這個狀態對於我們來說就沒什麼用。
對於不同的產品,交易狀態是否觸發都不一樣,例如手機網站支付:
除了交易創建之外,其他都是預設會發送的。參考:[各支付產品非同步通知觸發說明]
訂閱消息的觸發條件
上面介紹支付寶交易的觸發條件,下麵來簡單說明下訂閱消息是如何觸髮狀態的。
訂閱消息的觸髮狀態就有很多了,不同的產品有不同的觸髮狀態。下麵以商家券產品為例:
目前有創建、修改、停止、追加四種通知,需要哪個狀態觸發通知,就訂閱哪個通知。
目前的訂閱方式有兩種:WebSocket 和 HTTP。
- 如果是 HTTP 的方式,接收的地址直接配置在應用網關上;
- WebSocket 的方式無需配置應用網關,按照文檔進行接入即可。
四、獲取到非同步通知之後要做什麼
上面說過,支付寶的非同步通知是以 post 方式獲取的,用來判斷交易的狀態,那麼接收到非同步通知之後除了進行交易狀態的判斷之外我們還需要做什麼呢?直接進行邏輯處理?數據落庫?
都不是,重要的是 安全! 安全! 安全!(▼ヘ▼#) 嚴肅強調
收到非同步通知消息之後一定要判斷清楚這條消息是不是真的是支付寶發出的,現在外面不法分子很多,大家要小心。
為了判斷消息的真偽,我們需要 先對接收到的數據進行驗簽。
驗簽的方式這邊就不做較多的敘述了,放在這裡大家自己看 [SDK 如何實現簽名驗簽]。
驗證成功之後需要直接在頁面上列印出 success 七個字元給支付寶,告訴支付寶你已經成功收到這個消息了。
如果你不想列印也行,只不過就是接下來的 24 個小時以內,支付寶會一直給你發這筆消息
驗簽處理完成之後,你想幹嘛就可以幹嘛啦~
以上就是關於支付寶非同步通知基本邏輯啦,歡迎大家一起補充訂正,✿✿ヽ(°▽°)ノ✿ 一起交流進步~