支付寶接口如何保證用戶支付完成數(shù)據(jù)庫狀態(tài)同步
廣告:
用戶支付成功頁面,該頁面有短暫的停留時間,買家看到這個提示信息后有可能會把當前頁面關(guān)掉,導(dǎo)致頁面沒有自動跳轉(zhuǎn)回商戶網(wǎng)站(return_url)使得商戶的業(yè)務(wù)數(shù)據(jù)沒有被處理(如:訂單沒有更新)。出現(xiàn)這種情況的原因是:商戶網(wǎng)站的支付寶接口并沒有利用服務(wù)器異步通知頁面文件(notify_url)或是該頁面在訂單執(zhí)行過程中也出現(xiàn)異常。
解決方法:
解決人員:商戶網(wǎng)店開發(fā)、維護或管理的程序開發(fā)技術(shù)人員、商戶網(wǎng)店系統(tǒng)提供商
解決步驟:
1、打開return_url頁面文件(參數(shù)參數(shù)return_url對應(yīng)返回文件),找到已經(jīng)編寫好的業(yè)務(wù)邏輯處理程序代碼段,對其增加防止該筆交易被重復(fù)處理判斷。
2、打開notify_url頁面文件(參數(shù)參數(shù)notify_url對應(yīng)返回文件),找到可插入商戶的業(yè)務(wù)邏輯處理程序代碼的地方,編寫與return_url頁面文件中相類似的程序,也需要包含防止該筆交易被重復(fù)處理的判斷。
如:
'——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以上代碼僅作參考)——
'Response.Write "驗證成功<br>"
userid=0
if request.Cookies("member")("userid")<>"" then
userid = request.Cookies("member")("userid")
end if
'根據(jù)訂單號更新訂單,把訂單處理成交易成功
conn.execute("update mvc_order set paystate='已付款',trade_no=' " & trade_no & " ' where ordernum='" & out_trade_no & "' ")
修改完成后效果:
當買家關(guān)掉自動跳轉(zhuǎn)回商戶網(wǎng)站的返回頁面(參數(shù)return_url對應(yīng)的return_url返回文件)時,商戶的業(yè)務(wù)處理依舊被notify_url頁面文件所執(zhí)行,因此就不會發(fā)生業(yè)務(wù)沒有同步的現(xiàn)象出現(xiàn)(如:訂單沒有被更新)
注意:
1、注意獲取值的方式,notify_url頁面文件是POST方式獲取(request.form("參數(shù)名 ")、$_POST['參數(shù)名']),return_url頁面文件是GET方式獲取(request.querrystring("參數(shù)名 ")、$_GET['參數(shù)名'])
2、notify_url文件的特性是:
1、 必須保證服務(wù)器異步通知頁面(notify_url)上無任何字符,如空格、HTML標簽、開發(fā)系統(tǒng)自帶拋出的異常提示信息等;
2、 該頁面中獲得參數(shù)的方式,需要使用POST方式獲取,如:
request.Form(“out_order_no”)、$_POST['out_order_no'];
3、 支付寶主動發(fā)起通知,該方式才會被啟用;
4、 只有在支付寶的交易管理中存在該筆交易,且發(fā)生了交易狀態(tài)的改變,支付寶才會通過該方式發(fā)起服務(wù)器通知(即時到賬中交易狀態(tài)為“等待買家付款”的狀態(tài)默認是不會發(fā)送通知的);
5、 服務(wù)器間的交互,不像頁面跳轉(zhuǎn)同步服務(wù)器異步通知頁面可以在頁面上顯示出來,這種交互方式是不可見的;
6、 第一次交易狀態(tài)改變(即時到賬中此時交易狀態(tài)是交易完成)時,不僅頁面跳轉(zhuǎn)同步通知頁面會啟用,而且服務(wù)器異步通知頁面也會收到支付寶發(fā)來的處理結(jié)果通知;
7、 程序執(zhí)行完后必須打印輸出“success”(不包含引號)。如果商戶反饋給支付寶的字符不是success這7個字符,支付寶服務(wù)器會不斷重發(fā)通知,直到超過24小時22分鐘。
在25小時內(nèi)完成6~10次通知(通知頻率:5s,2m,10m,15m,1h,2h,6h,15h);
8、 程序執(zhí)行完成后,該頁面不能執(zhí)行頁面跳轉(zhuǎn)。如果執(zhí)行頁面跳轉(zhuǎn),支付寶會收不到success字符,會被支付寶服務(wù)器判定為該頁面程序運行出現(xiàn)異常,而重發(fā)處理結(jié)果通知;
9、 cookies、session等在此頁面會失效,即無法獲取這些數(shù)據(jù);
10、 該方式的調(diào)試與運行必須在服務(wù)器上,即互聯(lián)網(wǎng)上能訪問;
11、 該方式的作用主要防止訂單丟失,即頁面跳轉(zhuǎn)同步服務(wù)器異步通知頁面沒有處理訂單更新,它則去處理;
12、 通知ID(參數(shù)notify_id)只有一分鐘有效期,超過一分鐘該次通知會驗證失敗。一旦驗證成功下次再驗證就會失效。
"如果您依照以上方法還無法解決,可提交集成申請,我們的技術(shù)支持會及時與您聯(lián)系,協(xié)助您解決。
申請地址:https://b.alipay.com/support/helperApply.htm?action=supportHome"
廣告: