1:環境部署
安裝NetPay4NTSetup.exe,将MerPrk.key和PgPubk.key兩個檔案放到C:\WINDOWS目錄下,環境部署完成了。
2:程式中要注意的問題
最容易導緻問題的就是生成加密串,這個加密功能是由銀聯提共的,調用Interop.CHINAPAYLib.dll中類CHINAPAYLib.NetPayClientClass的sign方法,由于這是對字元串進行加密,不同的字元串加密後的串是不一樣的,是以要注意被加密字元前後是否有多餘的空格,支付金額的位數,如果加密串生成有誤,到銀聯那邊肯定報參數有誤的。充值成功後就是回調解密,解密調用的是CHINAPAYLib.NetPayClientClass的check方法,傳回“0”表示成功,其他值表示失敗。充值成功才能進行轉點和發獎。
3:還要注意的一個問題是充值金額
充值金額是一個12位的字元串,以分作為機關,如000000001000表示10元,不能送出0元的訂單。
4:銀聯訂單的大緻流程:使用者送出一個訂單,将部分參數的值加在一起,按照一定的方式加密,将結果和其他參數POST到銀聯的指定位址,銀聯會對參數進行驗證,如果驗證通過則認為是合法的訂單,使用者可以開始支付,支付成功之後,銀聯會對兩個位址發送請求,一個位址是前台顯示頁面(告訴使用者支付成功),另一個頁面則是邏輯功能頁面,把使用者買的東西給他,先還是驗證訂單是否合法,進一步确認使用者是否已經支付,支付成功後就把東西給使用者。并告訴銀聯已經把東西給使用者了,如果出現問題,銀聯會隔一段時間再次發送請求,時間間隔會越來越大,一定時間過來不再發送請求,有時候銀聯那邊也會出現問題,使用者的錢扣了,但是沒有向我們指定的頁面發送請求,就隻能聯系銀聯讓他們退錢,所有的支付流程大緻都是這樣的,隻是不同的支付方式驗證不一樣。
驗證無非3種:
1:參數驗證,參數的格式驗證,加密串是否比對
2:IP驗證,隻有雙方約定的IP才能通路
3:訂單的驗證,驗證訂單是否支付
1是必驗證的,2||3=true就可,就怕為false,那樣真的很不安全
環境就是為了解決加密解密問題。登入公司在快錢的賬号,按照相關提示可以生成一個加密問題和一個解密問題,解密檔案要上傳到快錢上,因為我們加密後傳過去的字元串他們要解密驗證。我們的程式隻用調用這個兩個檔案,生成訂單的時候要調用加密檔案,回調的時候要調用解密檔案,這兩個檔案建議放在C槽的一個目錄中,把他們的路徑配在配置檔案中共程式調用。IP驗證是必須的,隻能讓指定的IP通路就安全多了,如果哪個牛人能突破IP的限制,或者構造虛假的IP,那就真的可以橫沖直撞了。
2:生成加密串注意的問題
所有的參數都是先放到Dictionary中的,然後生成一個字元串,參數加入dictionary中的順序千萬不能改,改了就是不同的字元串了,加密後的字元串當然是不一樣的。總之要確定加密和解密的參數的順序是一樣的。
充值金額沒有位數的限制,以分為機關,如1000表示10元,左邊不能補0
支付寶不需要環境的支援。參數用MD5加密,為了確定安全,在回調頁還要向支付寶發送一個請求,驗證訂單是否支付,參數的順序是按照參數的名字排序的,是以用的是SortedDictionary集合。
注意:所有的參數都要放到集合當中,哪怕是送出按鈕,是以送出按鈕最好不要設定name屬性。這一點也是支付寶最坑爹的,我猜它是将所有參數按照參數名稱排序并串聯,然後加密的,你的POST參數多了或者少了參數,哪怕是無關沒用的參數都會導緻加密串驗證失敗。當然這樣做也好處,不用管參數的串聯順序,不像其他的充值方式,非要A參數必須在B參數的前面。
支付寶支付能確定支付的安全性主要是在回調頁面還要去支付寶驗證訂單是否支付,當然還會驗證訂單的關聯是否正确,不然還是有漏洞。
沒有任何特殊,是以注意的地方比較少,確定被加密的參數順序不變,即參數的順序是定的,不能改變。參數MD5加密。解密也是最簡單的,加密的時候MD5一次,解密的時候在把參數MD5一下,兩次MD5結果一樣表示已經支付,相比上面幾種支付方式,它是最不安全的。雖然回調頁面有一個IP限制。 要是沒有這個限制那真的是徹底将接口暴露了,隻要會點程式的人,都能很容易寫一個東西去攻擊了,不用付錢就能得到你想要的東西。
V币支付同樣沒有任何特殊的地方,MD5驗證,跟神州行和聯通卡類似。
駿卡支付跟其他支付方式不一樣的地方時我們提供接口,供駿卡那邊調用,由于這個接口是公開的,是以做了IP限制,隻有駿卡那邊提供的IP才能通路這個接口。驗證也是MD5加密驗證。
流程:使用者在駿卡的網站上送出一個訂單,然後駿卡會向我們的接口發送一個請求,我們就給使用者轉一定的點數,然後輸出結果。然後駿卡那邊會扣使用者的駿點。
網絡支付最常用的支付方式一般是:銀聯支付、塊錢支付、支付寶。當然還有其他的支付方式。我覺得這三種支付方式是相對比較安全的。銀聯和塊錢都有自己的加密解密方式,而且使用者也不知道哪些參數是加密串的一部分,參數的順序也是未知的;支付寶雖然是MD5加密,但會在回調頁面驗證訂單是否支付,保證了安全性。
寫着寫着發現還是很能存在漏洞,不敢多說了。真要把網站寫得很安全真不是簡單的事情,要考慮的方面還真的比較多,特别是涉及到支付、送出資料的地方。比如A頁面向B頁面發送一個請求,B頁面向資料庫中插入資料,如果沒有在B頁面中做有效驗證,任何程式員就可以花不到半個小時的時間寫一個小東西,向B頁面不斷的送出資料,很容易就把資料庫給弄爆了。是以最好别得罪程式員,特别是牛B的程式員。
本文轉自啊漢部落格園部落格,原文連結:http://www.cnblogs.com/hlxs/archive/2012/05/29/2523706.html