本文實(shí)例分析了php進(jìn)行支付寶開(kāi)發(fā)中return_url和notify_url的區(qū)別。分享給大家供大家參考。具體分析如下:
在支付寶處理業(yè)務(wù)中return_url,notify_url是返回些什么狀態(tài)呢,我們要根據(jù)它來(lái)做一些處理就必須了解return_url,notify_url的區(qū)別,下面我就來(lái)給大家介紹介紹.
問(wèn)題描述:
我在處理支付寶業(yè)務(wù)中出現(xiàn)過(guò)這樣的問(wèn)題,付費(fèi)完成后,在支付寶跳轉(zhuǎn)到商家指定頁(yè)面時(shí),訂單狀態(tài)已經(jīng)更新,通過(guò)調(diào)試發(fā)現(xiàn)是支付寶先通知notify_url,完成了訂單狀態(tài).
支付寶return_url和notify_url通知順序問(wèn)題:
順序不一定的,請(qǐng)別以先后順序來(lái)做判斷,具體如何判斷,是根據(jù)您當(dāng)前數(shù)據(jù)庫(kù)里的狀態(tài)和剛從支付寶里獲取到的狀態(tài)做對(duì)比來(lái)判斷是否有做過(guò)處理了.
關(guān)于支付寶return_url和notify_url的區(qū)別,同步通知頁(yè)面特性(return_url特性):
(1) 買(mǎi)家在支付成功后會(huì)看到一個(gè)支付寶提示交易成功的頁(yè)面,該頁(yè)面會(huì)停留幾秒,然后會(huì)自動(dòng)跳轉(zhuǎn)回商戶(hù)指定的同步通知頁(yè)面(參數(shù)return_url);
(2) 該頁(yè)面中獲得參數(shù)的方式,需要使用GET方式獲取,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];
(3) 該方式僅僅在買(mǎi)家付款完成以后進(jìn)行自動(dòng)跳轉(zhuǎn),因此只會(huì)進(jìn)行一次;
(4) 該方式不是支付寶主動(dòng)去調(diào)用商戶(hù)頁(yè)面,而是支付寶的程序利用頁(yè)面自動(dòng)跳轉(zhuǎn)的函數(shù),使用戶(hù)的當(dāng)前頁(yè)面自動(dòng)跳轉(zhuǎn);
(5) 基于(4)的原因,可在本機(jī)而不是只能在服務(wù)器上進(jìn)行調(diào)試;
(6) 返回URL只有一分鐘的有效期,超過(guò)一分鐘該鏈接地址會(huì)失效,驗(yàn)證則會(huì)失敗;
(7) 設(shè)置頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面(return_url)的路徑時(shí),不要在頁(yè)面文件的后面再加上自定義參數(shù)。例如:
錯(cuò)誤的寫(xiě)法:
正確的寫(xiě)法:
服務(wù)器異步通知頁(yè)面特性(notify_url特性):
(1) 必須保證服務(wù)器異步通知頁(yè)面(notify_url)上無(wú)任何字符,如空格、HTML標(biāo)簽、開(kāi)發(fā)系統(tǒng)自帶拋出的異常提示信息等;
(2) 支付寶是用POST方式發(fā)送通知信息,因此該頁(yè)面中獲取參數(shù)的方式,如:
request.Form("out_trade_no")、$_POST['out_trade_no']。
(3) 支付寶主動(dòng)發(fā)起通知,該方式才會(huì)被啟用;
(4) 只有在支付寶的交易管理中存在該筆交易,且發(fā)生了交易狀態(tài)的改變,支付寶才會(huì)通過(guò)該方式發(fā)起服務(wù)器通知(即時(shí)到賬中交易狀態(tài)為“等待買(mǎi)家付款”的狀態(tài)默認(rèn)是不會(huì)發(fā)送通知的);
(5) 服務(wù)器間的交互,不像頁(yè)面跳轉(zhuǎn)同步通知可以在頁(yè)面上顯示出來(lái),這種交互方式是不可見(jiàn)的;
(6) 第一次交易狀態(tài)改變(即時(shí)到賬中此時(shí)交易狀態(tài)是交易完成)時(shí),不僅頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面會(huì)啟用,而且服務(wù)器異步通知頁(yè)面也會(huì)收到支付寶發(fā)來(lái)的處理結(jié)果通知;
(7) 程序執(zhí)行完后必須打印輸出“success”(不包含引號(hào))。如果商戶(hù)反饋給支付寶的字符不是success這7個(gè)字符,支付寶服務(wù)器會(huì)不斷重發(fā)通知,直到超過(guò)24小時(shí)22分鐘。
一般情況下,25小時(shí)以?xún)?nèi)完成8次通知(通知的間隔頻率一般是:2m,10m,10m,1h,2h,6h,15h);
(8) 程序執(zhí)行完成后,該頁(yè)面不能執(zhí)行頁(yè)面跳轉(zhuǎn)。如果執(zhí)行頁(yè)面跳轉(zhuǎn),支付寶會(huì)收不到success字符,會(huì)被支付寶服務(wù)器判定為該頁(yè)面程序運(yùn)行出現(xiàn)異常,而重發(fā)處理結(jié)果通知;
(9) cookies、session等在此頁(yè)面會(huì)失效,即無(wú)法獲取這些數(shù)據(jù);
(10) 該方式的調(diào)試與運(yùn)行必須在服務(wù)器上,即互聯(lián)網(wǎng)上能訪問(wèn);
(11) 該方式的作用主要防止訂單丟失,即頁(yè)面跳轉(zhuǎn)同步通知沒(méi)有處理訂單更新,它則去處理;
(12) 通知ID(參數(shù)notify_id)只有一分鐘有效期,超過(guò)一分鐘該次通知會(huì)驗(yàn)證失敗。一旦驗(yàn)證成功下次再驗(yàn)證就會(huì)失效。
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。