支付寶開發中return_url和notify_url的區別分析

在處理支付寶業務中出現過這樣的問題,付費完成後,在支付寶跳轉到商家指定頁面時,訂單狀態已經更新,經過調試發現是支付寶先通知notify_url,完成了訂單狀態.php

支付寶return_url和notify_url通知順序問題:數據庫

順序不必定的,請別以前後順序來作判斷,具體如何判斷,是根據您當前數據庫裏的狀態和剛從支付寶裏獲取到的狀態作對比來判斷是否有作過處理了.服務器

關於支付寶return_url和notify_url的區別,同步通知頁面特性(return_url特性):cookie

(1) 買家在支付成功後會看到一個支付寶提示交易成功的頁面,該頁面會停留幾秒,而後會自動跳轉回商戶指定的同步通知頁面(參數return_url);session

(2) 該頁面中得到參數的方式,須要使用GET方式獲取,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];異步

(3) 該方式僅僅在買家付款完成之後進行自動跳轉,所以只會進行一次;函數

(4) 該方式不是支付寶主動去調用商戶頁面,而是支付寶的程序利用頁面自動跳轉的函數,使用戶的當前頁面自動跳轉;url

(5) 基於(4)的緣由,可在本機而不是隻能在服務器上進行調試;spa

(6) 返回URL只有一分鐘的有效期,超過一分鐘該連接地址會失效,驗證則會失敗;調試

(7) 設置頁面跳轉同步通知頁面(return_url)的路徑時,不要在頁面文件的後面再加上自定義參數。例如:

錯誤的寫法:

複製代碼 代碼以下:
<http://www.alipay.com/alipay/return_url.php?xx=11>

 

正確的寫法:

複製代碼 代碼以下:
<http://www.alipay.com/alipay/return_url.php>

 

服務器異步通知頁面特性(notify_url特性):

(1) 必須保證服務器異步通知頁面(notify_url)上無任何字符,如空格、HTML標籤、開發系統自帶拋出的異常提示信息等;

(2) 支付寶是用POST方式發送通知信息,所以該頁面中獲取參數的方式,如:

request.Form("out_trade_no")、$_POST['out_trade_no']。

(3) 支付寶主動發起通知,該方式纔會被啓用;

(4) 只有在支付寶的交易管理中存在該筆交易,且發生了交易狀態的改變,支付寶纔會經過該方式發起服務器通知(即時到帳中交易狀態爲「等待買家付款」的狀態默認是不會發送通知的);

(5) 服務器間的交互,不像頁面跳轉同步通知能夠在頁面上顯示出來,這種交互方式是不可見的;

(6) 第一次交易狀態改變(即時到帳中此時交易狀態是交易完成)時,不只頁面跳轉同步通知頁面會啓用,並且服務器異步通知頁面也會收到支付寶發來的處理結果通知;

(7) 程序執行完後必須打印輸出「success」(不包含引號)。若是商戶反饋給支付寶的字符不是success這7個字符,支付寶服務器會不斷重發通知,直到超過24小時22分鐘。

通常狀況下,25小時之內完成8次通知(通知的間隔頻率通常是:2m,10m,10m,1h,2h,6h,15h);

(8) 程序執行完成後,該頁面不能執行頁面跳轉。若是執行頁面跳轉,支付寶會收不到success字符,會被支付寶服務器斷定爲該頁面程序運行出現異常,而重發處理結果通知;

(9) cookies、session等在此頁面會失效,即沒法獲取這些數據;

(10) 該方式的調試與運行必須在服務器上,即互聯網上能訪問;

(11) 該方式的做用主要防止訂單丟失,即頁面跳轉同步通知沒有處理訂單更新,它則去處理;

(12) 通知ID(參數notify_id)只有一分鐘有效期,超過一分鐘該次通知會驗證失敗。一旦驗證成功下次再驗證就會失效。

相關文章
相關標籤/搜索