一般使用支付寶支付的原理:
現(xiàn)支付寶的通知基本上有兩類拘领。
A服務器通知意乓,對應的參數(shù)為notify_url,支付寶通知使用POST方式
B頁面跳轉通知约素,對應的參數(shù)為return_url届良,支付寶通知使用GET方式 (通知地址不需要像以前一樣去賬戶內(nèi)設置,而是由客戶在支付的時候通過參數(shù)傳遞給我地址圣猎。
四士葫、 通知返回
a) 返回頁
傳遞給支付寶時的return_url參數(shù)所對應的頁面文件。
具備的屬性:
1送悔、支付接口中買家的購買流程已經(jīng)走到支付寶里且支付寶提示支付成功時为障,頁面會自動跳轉回自身網(wǎng)站的這個頁面里來。
2放祟、同步的,無時差
3呻右、獲得參數(shù)的方法是用get方式獲取跪妥。
4、不論跳轉回來程序判斷是真還是假(if(sign = mysign and responseTxt = true))只跳轉回來一次声滥,不重復眉撵。
5、這個并不是支付寶服務器調(diào)用了該頁面落塑,而是通過與組合拼接各參數(shù)形成的URL鏈接原理等同纽疟,拼接出來的URL鏈接,之后程序上做自動跳轉憾赁。
6污朽、基于5的原因,該頁面的程序調(diào)試可不必在服務器上而是本機上調(diào)試龙考、運行蟆肆。
b) 通知頁
傳遞給支付寶時的notify_url參數(shù)所對應的頁面文件
具備的屬性:
1、這個通知頁就是被支付寶調(diào)用才能啟動的晦款。
2炎功、服務器間的互動,不像返回頁肉眼可以看到缓溅,這個是看不到的蛇损。
3、獲得參數(shù)的方法是用POST方式獲取。
4淤齐、支付寶中的該筆交易存在股囊,且該筆交易狀態(tài)發(fā)生了變更,就會被調(diào)用床玻。
5毁涉、被調(diào)用程序判斷(if(sign = mysign and responseTxt = true)),若我們自己在該判斷中有做程序編寫锈死,成功則不再被調(diào)用贫堰,不成功則會反復被調(diào)用。
6待牵、異步的其屏,第一次收到訂單信息(以下都稱之為“通知”)是與返回頁近乎等同或等同的同步時間,在判斷不成功的情況下缨该,會收到第二次第三次等次數(shù)的通知偎行,時間間隔從最先的一兩分鐘,到后面的幾個小時贰拿。失效時間是4
8小時蛤袒。
7、基于6的原因膨更,該頁面的程序調(diào)試必須在服務器上調(diào)試妙真、運行。
8荚守、程序編寫時必須采用程序執(zhí)行成功珍德,才寫頁面response.Write(“success”);,不成功則寫頁面response.Write(“fail”); 支付寶根據(jù)success來判定是否要重新再次發(fā)送通知矗漾。
9锈候、該頁面的Html頁面中必須是空白、無任何Html標簽敞贡、無任何空格泵琳、不允許做頁面跳轉。
異步返回結果
第一步: 在通知返回參數(shù)列表中嫡锌,除去sign虑稼、sign_type兩個參數(shù)外,凡是通知返回回來的參數(shù)皆是待驗簽的參數(shù)势木。
第二步: 將剩下參數(shù)進行url_decode, 然后進行字典排序蛛倦,組成字符串,得到待簽名字符串,
第三步: 將簽名參數(shù)(sign)使用base64解碼為字節(jié)碼串啦桌。
第四步: 使用RSA的驗簽方法溯壶,通過簽名字符串及皂、簽名參數(shù)(經(jīng)過base64解碼)及支付寶公鑰驗證簽名。
第五步:在步驟四驗證簽名正確后且改,必須再嚴格按照如下描述校驗通知數(shù)據(jù)的正確性验烧。
常見問題:
1.根據(jù)代碼實例和開發(fā)文檔熟悉接口,將代碼實例的相關參數(shù)信息填寫完整(可以虛擬參數(shù))又跛,在本地測試(不上傳到服務器)支付寶接口碍拆。如果沒有任何問題再將接口根據(jù)實際業(yè)務做到網(wǎng)站或者網(wǎng)站后臺。
2.測試時您們需要兩個支付寶賬戶慨蓝,其中一個必須實名認證并且保證有一定的金額感混,以便測試時使用。另外一個帳戶可以作為收款方(賣家)(針對于支付接口)
3.如果做支付寶訂單信息和您們后臺數(shù)據(jù)同步請集成時做數(shù)據(jù)返回處理礼烈,本地測試可以使用同步測試弧满,如果在服務器上測試,可以通過異步來做也可以(支付寶有兩種數(shù)據(jù)返回處理:同步返回和異步返回)此熬。
同步返回(return_url)和異步返回(notify_url)的區(qū)別【return_url和notify_url參數(shù)必須是兩個返回處理文件的絕對路徑】庭呜?
答:同步返回處理(return_url):是一種可視化的返回,ie頁面跳轉通知犀忱,只要支付成功募谎,支付寶通過get方式跳轉到這個地址,并且?guī)в袇?shù)給這個頁面阴汇〗矗客戶獲取信息受到買家操作的影響。如果買家支付完
成后客戶服務器響應比較慢鲫寄,買家在顯示支付寶提示的“即時到賬支付成功“時關閉頁面,那么客戶網(wǎng)站是獲取不到信息疯淫,我們這邊稱為” 掉單“地来。而且這個返回處理是一次性調(diào)取,即支付成功后才調(diào)取同步返回處理熙掺。
異步返回處理(notify_url):它的數(shù)據(jù)交互是通過服務器間進行數(shù)據(jù)交互,必須將其放置在服務器上(公網(wǎng))測試未斑,服務器post消息到異步返回處理頁面,需要客戶技術在異步返回處理頁面處理相關的數(shù)據(jù)處理
币绩,然后每一步操作都要返回給支付寶success(不能包含其他的HTML腳本語言蜡秽,不可以做頁面跳轉。)這個返回處理如果集成OK缆镣,那么基本不會出現(xiàn)掉單芽突,因為支付寶會在24小時之內(nèi)分6~10次將訂單信息返回
個給客戶網(wǎng)站,直到支付寶捕獲success董瞻。
備注:同步返回處理則會受到買家操作的影響:
假如買家在操作的時候寞蚌,支付寶完畢進入支付寶提示成功頁面田巴,這個時候由于服務器相應比較慢,那么買家有可能會關閉這個頁面挟秤,這個時候您們就會接受不到支付寶返回的信息壹哺,還有有些網(wǎng)銀支付后也不會調(diào)取支付寶的同步返
回處理頁面,這樣您在同步做數(shù)據(jù)處理同樣接受不到數(shù)據(jù)艘刚。
備注:
請注意:現(xiàn)在您們集成的時候先按照提供給您們的測試賬戶的ID來做管宵,至于正式賬戶的ID您們可以找等合同正式生效后再查詢(獲取方法:登陸簽約的
支付寶賬戶-?點擊“商家服務”,就可以看到)
--處理支付寶返回通知失敗幾種情況:
1攀甚、SIGN與MYSIGN不等箩朴,responseTxt為invalid命令參數(shù)不對,該錯誤 是由于合作伙伴ID(parnterID)與安全校驗碼(key)未填云稚,或填錯導致
2隧饼、SIGN與MYSIGN相等,responseTxt為false静陈,是由于服務器燕雁、端口等因素導致,這時請檢查
a.防火墻是否屏蔽支付寶的IP(支付寶鎖使用的IP地址是:121.0.26.11,范圍:121.026.0~255)
b.端口80或者443端口開放沒有或者被其他服務占用
c.以上如果都沒有問題鲸拥,可能會是網(wǎng)絡驗證超時導致(支付寶驗證時間是1分鐘拐格,SIGN與MYSIGN不等會導致超時),需要等待網(wǎng)絡穩(wěn)定再確定問題
3刑赶、SIGN與MYSIGN不等捏浊,responseTxt為true,此時只有兩種情況會出現(xiàn):
其一:傳遞參數(shù)時格式不符合(例如:帶自定義參數(shù))導致簽名不一致
其二:編碼格式出現(xiàn)問題撞叨,這時候請檢查服務器編碼和網(wǎng)站編碼是否一致金踪,可以寫編碼過濾解決也可以在返回頁面強制編碼轉換