手把手|支付寶異步通知如何使用

最近在接支付寶的支付相關(guān)功能,用到異步通知比較多,也比較容易出現(xiàn)問題。

這里總結(jié)了一下支付寶異步通知的相關(guān)內(nèi)容,希望能對大家有所幫助。


一、什么是異步通知

異步通知是指支付寶通過主動向開發(fā)者發(fā)送消息通知的方式來告知商家目前交易變更的情況。

支付寶建議主要通過這種方式來確定實際的交易狀態(tài),實際是通過 POST 的方式去發(fā)送通知的。


二、如何設(shè)置異步通知地址

既然是支付寶主動通知,需要預(yù)先給到支付寶提供一個通知的地址,而根據(jù)不同的產(chǎn)品,異步通知的地址設(shè)置的也不同,主要分為以下兩個情況:

● 通過接口參數(shù)配置的異步通知地址

●?通過平臺配置的異步通知地址


通過接口參數(shù)配置的異步通知地址

使用場景:交易類收單產(chǎn)品,例如當(dāng)面付、手機網(wǎng)站支付等

配置方式:在接口的 notify_url 參數(shù)中設(shè)置接收的地址 [如何設(shè)置notify_url]

地址要求:能正常訪問(http 狀態(tài)為 200)

接口是否支持異步通知就看對應(yīng)的接口文檔參數(shù)里面是否有 notify_url 參數(shù)。


通過平臺配置的異步通知地址

使用場景:資金營銷類產(chǎn)品,例如轉(zhuǎn)賬到支付寶賬號、商家券、螞蟻門店等

配置方式:在開發(fā)應(yīng)用下的應(yīng)用網(wǎng)關(guān)里進行地址配置 [如何設(shè)置應(yīng)用網(wǎng)關(guān)]

地址要求:能正常訪問(http 狀態(tài)為 200)

?? 特別說明:需要先對消息通知進行訂閱操作,不訂閱不發(fā)哦 [如何訂閱螞蟻消息]

三、異步通知如何觸發(fā)

支付寶的異步通知也不是你想要就能給你發(fā)的,他發(fā)送的邏輯主要是按照該事件是否達到了某個【狀態(tài)】

對于交易類的產(chǎn)品,支付寶統(tǒng)一設(shè)定了交易狀態(tài),針對不同產(chǎn)品的狀態(tài)有基本是否發(fā)送配置,下面將對各類交易狀態(tài)進行逐一介紹。


支付寶交易狀態(tài)說明

支付寶給訂單設(shè)置了四個交易狀態(tài),分別為:

●?WAIT_BUYER_PAY(交易創(chuàng)建,等待買家付款)

●?TRADE_SUCCESS(交易支付成功,可退款)

●?TRADE_FINISHED(交易結(jié)束,不可退款)

●?TRADE_CLOSED(未付款交易超時關(guān)閉,或支付完成后全額退款)

經(jīng)驗分享:交易成功(TRADE_SUCCESS)和交易結(jié)束(TRADE_FINISHED)的區(qū)別在于是否可以退款,這個怎么理解呢?

關(guān)鍵點在于這筆交易 是否允許退款 或者是 允許多久時間內(nèi)可以退款。

如果交易是不允許退款的交易,訂單的交易狀態(tài)會直接變?yōu)榻灰捉Y(jié)束(TRADE_FINISHED),并不會經(jīng)過交易成功(TRADE_SUCCESS);

如果是允許6個月內(nèi)退款的,在交易成功之后的6個月后才會由交易成功(TRADE_SUCCESS)變?yōu)榻灰捉Y(jié)束(TRADE_FINISHED)。

因為這個邏輯,就會出現(xiàn)一些奇奇怪怪的問題 (。_ 。) 例如:

●?[交易成功后一年又收到異步通知]

[交易成功后 3 個月又收到異步通知]


支付寶交易狀態(tài)觸發(fā)條件

那么,是所有的狀態(tài)都會發(fā)送嗎?可不可以不發(fā)送?

當(dāng)然不是所有狀態(tài)都發(fā)送的,比如交易創(chuàng)建,等待買家付款(WAIT_BUYER_PAY)這個狀態(tài)對于我們來說就沒什么用。

對于不同的產(chǎn)品,交易狀態(tài)是否觸發(fā)都不一樣,例如手機網(wǎng)站支付:

除了交易創(chuàng)建之外,其他都是默認會發(fā)送的。參考:[各支付產(chǎn)品異步通知觸發(fā)說明]


訂閱消息的觸發(fā)條件

上面介紹支付寶交易的觸發(fā)條件,下面來簡單說明下訂閱消息是如何觸發(fā)狀態(tài)的。

訂閱消息的觸發(fā)狀態(tài)就有很多了,不同的產(chǎn)品有不同的觸發(fā)狀態(tài)。下面以商家券產(chǎn)品為例:


目前有創(chuàng)建、修改、停止、追加四種通知,需要哪個狀態(tài)觸發(fā)通知,就訂閱哪個通知。

目前的訂閱方式有兩種:WebSocket 和 HTTP。


●?如果是 HTTP 的方式,接收的地址直接配置在應(yīng)用網(wǎng)關(guān)上;

●?WebSocket 的方式無需配置應(yīng)用網(wǎng)關(guān),按照文檔進行接入即可。


四、獲取到異步通知之后要做什么

上面說過,支付寶的異步通知是以 post 方式獲取的,用來判斷交易的狀態(tài),那么接收到異步通知之后除了進行交易狀態(tài)的判斷之外我們還需要做什么呢?直接進行邏輯處理?數(shù)據(jù)落庫?

都不是,重要的是 安全! 安全! 安全!(▼ヘ▼#) 嚴肅強調(diào)

收到異步通知消息之后一定要判斷清楚這條消息是不是真的是支付寶發(fā)出的,現(xiàn)在外面不法分子很多,大家要小心。

為了判斷消息的真?zhèn)?,我們需?先對接收到的數(shù)據(jù)進行驗簽。

驗簽的方式這邊就不做較多的敘述了,放在這里大家自己看 [SDK 如何實現(xiàn)簽名驗簽]。

驗證成功之后需要直接在頁面上打印出 success 七個字符給支付寶,告訴支付寶你已經(jīng)成功收到這個消息了。

如果你不想打印也行,只不過就是接下來的 24 個小時以內(nèi),支付寶會一直給你發(fā)這筆消息

? [重復(fù)收到異步通知]

驗簽處理完成之后,你想干嘛就可以干嘛啦~

以上就是關(guān)于支付寶異步通知基本邏輯啦,歡迎大家一起補充訂正,??ヽ(°▽°)ノ? 一起交流進步~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容