一般使用支付寶支付的原理 :
現(xiàn)支付寶的通知基本上有兩類(lèi)疤坝。
A服務(wù)器通知,對(duì)應(yīng)的參數(shù)為notify_url,支付寶通知使用POST方式
B頁(yè)面跳轉(zhuǎn)通知责嚷,對(duì)應(yīng)的參數(shù)為return_url,支付寶通知使用GET方式 (通知地址不需要像以前一樣去賬戶(hù)內(nèi)設(shè)置掂铐,而是由客戶(hù)在支付的時(shí)候通過(guò)參數(shù)傳遞給我地址罕拂。
四、 通知返回
a) 返回頁(yè)
傳遞給支付寶時(shí)的return_url參數(shù)所對(duì)應(yīng)的頁(yè)面文件全陨。
具備的屬性:
1爆班、支付接口中買(mǎi)家的購(gòu)買(mǎi)流程已經(jīng)走到支付寶里且支付寶提示支付成功時(shí),頁(yè)面會(huì)自動(dòng)跳轉(zhuǎn)回自身網(wǎng)站的這個(gè)頁(yè)面里來(lái)辱姨。
2柿菩、同步的,無(wú)時(shí)差
3雨涛、獲得參數(shù)的方法是用get方式獲取枢舶。
4、不論跳轉(zhuǎn)回來(lái)程序判斷是真還是假(if(sign = mysign and responseTxt = true))只跳轉(zhuǎn)回來(lái)一次替久,不重復(fù)凉泄。
5、這個(gè)并不是支付寶服務(wù)器調(diào)用了該頁(yè)面侣肄,而是通過(guò)與組合拼接各參數(shù)形成的URL鏈接原理等同旧困,拼接出來(lái)的URL鏈接,之后程序上做自動(dòng)跳轉(zhuǎn)稼锅。
6吼具、基于5的原因,該頁(yè)面的程序調(diào)試可不必在服務(wù)器上而是本機(jī)上調(diào)試矩距、運(yùn)行拗盒。
b) 通知頁(yè)
傳遞給支付寶時(shí)的notify_url參數(shù)所對(duì)應(yīng)的頁(yè)面文件
具備的屬性:
1、這個(gè)通知頁(yè)就是被支付寶調(diào)用才能啟動(dòng)的锥债。
2陡蝇、服務(wù)器間的互動(dòng)痊臭,不像返回頁(yè)肉眼可以看到,這個(gè)是看不到的登夫。
3广匙、獲得參數(shù)的方法是用POST方式獲取。
4恼策、支付寶中的該筆交易存在鸦致,且該筆交易狀態(tài)發(fā)生了變更,就會(huì)被調(diào)用涣楷。
5分唾、被調(diào)用程序判斷(if(sign = mysign and responseTxt = true)),若我們自己在該判斷中有做程序編寫(xiě)狮斗,成功則不再被調(diào)用绽乔,不成功則會(huì)反復(fù)被調(diào)用。
6碳褒、異步的折砸,第一次收到訂單信息(以下都稱(chēng)之為“通知”)是與返回頁(yè)近乎等同或等同的同步時(shí)間,在判斷不成功的情況下骤视,會(huì)收到第二次第三次等次數(shù)的通知鞍爱,時(shí)間間隔從最先的一兩分鐘,到后面的幾個(gè)小時(shí)专酗。失效時(shí)間是4
8小時(shí)。
7盗扇、基于6的原因祷肯,該頁(yè)面的程序調(diào)試必須在服務(wù)器上調(diào)試、運(yùn)行疗隶。
8佑笋、程序編寫(xiě)時(shí)必須采用程序執(zhí)行成功,才寫(xiě)頁(yè)面response.Write(“success”);斑鼻,不成功則寫(xiě)頁(yè)面response.Write(“fail”); 支付寶根據(jù)success來(lái)判定是否要重新再次發(fā)送通知蒋纬。
9、該頁(yè)面的Html頁(yè)面中必須是空白坚弱、無(wú)任何Html標(biāo)簽蜀备、無(wú)任何空格、不允許做頁(yè)面跳轉(zhuǎn)荒叶。
異步返回結(jié)果
第一步: 在通知返回參數(shù)列表中碾阁,除去sign、sign_type兩個(gè)參數(shù)外些楣,凡是通知返回回來(lái)的參數(shù)皆是待驗(yàn)簽的參數(shù)脂凶。
第二步: 將剩下參數(shù)進(jìn)行url_decode, 然后進(jìn)行字典排序宪睹,組成字符串,得到待簽名字符串,
第三步: 將簽名參數(shù)(sign)使用base64解碼為字節(jié)碼串蚕钦。
第四步: 使用RSA的驗(yàn)簽方法亭病,通過(guò)簽名字符串、簽名參數(shù)(經(jīng)過(guò)base64解碼)及支付寶公鑰驗(yàn)證簽名嘶居。
第五步:在步驟四驗(yàn)證簽名正確后罪帖,必須再?lài)?yán)格按照如下描述校驗(yàn)通知數(shù)據(jù)的正確性。
常見(jiàn)問(wèn)題:
1.根據(jù)代碼實(shí)例和開(kāi)發(fā)文檔熟悉接口食听,將代碼實(shí)例的相關(guān)參數(shù)信息填寫(xiě)完整(可以虛擬參數(shù))胸蛛,在本地測(cè)試(不上傳到服務(wù)器)支付寶接口。如果沒(méi)有任何問(wèn)題再將接口根據(jù)實(shí)際業(yè)務(wù)做到網(wǎng)站或者網(wǎng)站后臺(tái)樱报。
2.測(cè)試時(shí)您們需要兩個(gè)支付寶賬戶(hù)葬项,其中一個(gè)必須實(shí)名認(rèn)證并且保證有一定的金額,以便測(cè)試時(shí)使用迹蛤。另外一個(gè)帳戶(hù)可以作為收款方(賣(mài)家)(針對(duì)于支付接口)
3.如果做支付寶訂單信息和您們后臺(tái)數(shù)據(jù)同步請(qǐng)集成時(shí)做數(shù)據(jù)返回處理民珍,本地測(cè)試可以使用同步測(cè)試,如果在服務(wù)器上測(cè)試盗飒,可以通過(guò)異步來(lái)做也可以(支付寶有兩種數(shù)據(jù)返回處理:同步返回和異步返回)嚷量。
同步返回(return_url)和異步返回(notify_url)的區(qū)別【return_url和notify_url參數(shù)必須是兩個(gè)返回處理文件的絕對(duì)路徑】?
答:同步返回處理(return_url):是一種可視化的返回逆趣,ie頁(yè)面跳轉(zhuǎn)通知蝶溶,只要支付成功,支付寶通過(guò)get方式跳轉(zhuǎn)到這個(gè)地址宣渗,并且?guī)в袇?shù)給這個(gè)頁(yè)面抖所。客戶(hù)獲取信息受到買(mǎi)家操作的影響痕囱。如果買(mǎi)家支付完
成后客戶(hù)服務(wù)器響應(yīng)比較慢田轧,買(mǎi)家在顯示支付寶提示的“即時(shí)到賬支付成功“時(shí)關(guān)閉頁(yè)面,那么客戶(hù)網(wǎng)站是獲取不到信息鞍恢,我們這邊稱(chēng)為” 掉單“傻粘。而且這個(gè)返回處理是一次性調(diào)取,即支付成功后才調(diào)取同步返回處理帮掉。
異步返回處理(notify_url):它的數(shù)據(jù)交互是通過(guò)服務(wù)器間進(jìn)行數(shù)據(jù)交互,必須將其放置在服務(wù)器上(公網(wǎng))測(cè)試弦悉,服務(wù)器post消息到異步返回處理頁(yè)面,需要客戶(hù)技術(shù)在異步返回處理頁(yè)面處理相關(guān)的數(shù)據(jù)處理
旭寿,然后每一步操作都要返回給支付寶success(不能包含其他的HTML腳本語(yǔ)言警绩,不可以做頁(yè)面跳轉(zhuǎn)。)這個(gè)返回處理如果集成OK盅称,那么基本不會(huì)出現(xiàn)掉單肩祥,因?yàn)橹Ц秾殨?huì)在24小時(shí)之內(nèi)分6~10次將訂單信息返回
個(gè)給客戶(hù)網(wǎng)站后室,直到支付寶捕獲success。
備注:同步返回處理則會(huì)受到買(mǎi)家操作的影響:
假如買(mǎi)家在操作的時(shí)候混狠,支付寶完畢進(jìn)入支付寶提示成功頁(yè)面岸霹,這個(gè)時(shí)候由于服務(wù)器相應(yīng)比較慢,那么買(mǎi)家有可能會(huì)關(guān)閉這個(gè)頁(yè)面将饺,這個(gè)時(shí)候您們就會(huì)接受不到支付寶返回的信息贡避,還有有些網(wǎng)銀支付后也不會(huì)調(diào)取支付寶的同步返
回處理頁(yè)面,這樣您在同步做數(shù)據(jù)處理同樣接受不到數(shù)據(jù)予弧。
備注:
請(qǐng)注意:現(xiàn)在您們集成的時(shí)候先按照提供給您們的測(cè)試賬戶(hù)的ID來(lái)做刮吧,至于正式賬戶(hù)的ID您們可以找等合同正式生效后再查詢(xún)(獲取方法:登陸簽約的
支付寶賬戶(hù)-?點(diǎn)擊“商家服務(wù)”,就可以看到)
--處理支付寶返回通知失敗幾種情況:
1掖蛤、SIGN與MYSIGN不等杀捻,responseTxt為invalid命令參數(shù)不對(duì),該錯(cuò)誤 是由于合作伙伴ID(parnterID)與安全校驗(yàn)碼(key)未填蚓庭,或填錯(cuò)導(dǎo)致
2致讥、SIGN與MYSIGN相等,responseTxt為false器赞,是由于服務(wù)器垢袱、端口等因素導(dǎo)致,這時(shí)請(qǐng)檢查
a.防火墻是否屏蔽支付寶的IP(支付寶鎖使用的IP地址是:121.0.26.11,范圍:121.026.0~255)
b.端口80或者443端口開(kāi)放沒(méi)有或者被其他服務(wù)占用
c.以上如果都沒(méi)有問(wèn)題港柜,可能會(huì)是網(wǎng)絡(luò)驗(yàn)證超時(shí)導(dǎo)致(支付寶驗(yàn)證時(shí)間是1分鐘请契,SIGN與MYSIGN不等會(huì)導(dǎo)致超時(shí)),需要等待網(wǎng)絡(luò)穩(wěn)定再確定問(wèn)題
3夏醉、SIGN與MYSIGN不等姚糊,responseTxt為true,此時(shí)只有兩種情況會(huì)出現(xiàn):
其一:傳遞參數(shù)時(shí)格式不符合(例如:帶自定義參數(shù))導(dǎo)致簽名不一致
其二:編碼格式出現(xiàn)問(wèn)題授舟,這時(shí)候請(qǐng)檢查服務(wù)器編碼和網(wǎng)站編碼是否一致,可以寫(xiě)編碼過(guò)濾解決也可以在返回頁(yè)面強(qiáng)制編碼轉(zhuǎn)換