常見充值方式介紹及對比


1:銀聯充值

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,那樣真的很不安全

 

2:快錢充值

1:環境部署

環境就是為了解決加密解密問題。登錄公司在快錢的賬號,按照相關提示可以生成一個加密問題和一個解密問題,解密文件要上傳到快錢上,因為我們加密后傳過去的字符串他們要解密驗證。我們的程序只用調用這個兩個文件,生成訂單的時候要調用加密文件,回調的時候要調用解密文件,這兩個文件建議放在C盤的一個目錄中,把他們的路徑配在配置文件中共程序調用。IP驗證是必須的,只能讓指定的IP訪問就安全多了,如果哪個牛人能突破IP的限制,或者構造虛假的IP,那就真的可以橫沖直撞了。

2:生成加密串注意的問題

所有的參數都是先放到Dictionary中的,然后生成一個字符串,參數加入dictionary中的順序千萬不能改,改了就是不同的字符串了,加密后的字符串當然是不一樣的。總之要確保加密和解密的參數的順序是一樣的。

3:還要注意的一個問題是充值金額

充值金額沒有位數的限制,以分為單位,如1000表示10元,左邊不能補0

3:支付寶

支付寶不需要環境的支持。參數用MD5加密,為了確保安全,在回調頁還要向支付寶發送一個請求,驗證訂單是否支付,參數的順序是按照參數的名字排序的,所以用的是SortedDictionary集合。

注意:所有的參數都要放到集合當中,哪怕是提交按鈕,所以提交按鈕最好不要設置name屬性。這一點也是支付寶最坑爹的,我猜它是將所有參數按照參數名稱排序並串聯,然后加密的,你的POST參數多了或者少了參數,哪怕是無關沒用的參數都會導致加密串驗證失敗。當然這樣做也好處,不用管參數的串聯順序,不像其他的充值方式,非要A參數必須在B參數的前面。

支付寶支付能確保支付的安全性主要是在回調頁面還要去支付寶驗證訂單是否支付,當然還會驗證訂單的關聯是否正確,不然還是有漏洞。

 

4:神州行和聯通卡

沒有任何特殊,所以注意的地方比較少,確保被加密的參數順序不變,即參數的順序是定的,不能改變。參數MD5加密。解密也是最簡單的,加密的時候MD5一次,解密的時候在把參數MD5一下,兩次MD5結果一樣表示已經支付,相比上面幾種支付方式,它是最不安全的。雖然回調頁面有一個IP限制。 要是沒有這個限制那真的是徹底將接口暴露了,只要會點程序的人,都能很容易寫一個東西去攻擊了,不用付錢就能得到你想要的東西。

5:V幣支付

V幣支付同樣沒有任何特殊的地方,MD5驗證,跟神州行和聯通卡類似。

6:駿卡支付

駿卡支付跟其他支付方式不一樣的地方時我們提供接口,供駿卡那邊調用,由於這個接口是公開的,所以做了IP限制,只有駿卡那邊提供的IP才能訪問這個接口。驗證也是MD5加密驗證。

流程:用戶在駿卡的網站上提交一個訂單,然后駿卡會向我們的接口發送一個請求,我們就給用戶轉一定的點數,然后輸出結果。然后駿卡那邊會扣用戶的駿點。

 

網絡支付最常用的支付方式一般是:銀聯支付、塊錢支付、支付寶。當然還有其他的支付方式。我覺得這三種支付方式是相對比較安全的。銀聯和塊錢都有自己的加密解密方式,而且用戶也不知道哪些參數是加密串的一部分,參數的順序也是未知的;支付寶雖然是MD5加密,但會在回調頁面驗證訂單是否支付,保證了安全性。

 

寫着寫着發現還是很能存在漏洞,不敢多說了。真要把網站寫得很安全真不是簡單的事情,要考慮的方面還真的比較多,特別是涉及到支付、提交數據的地方。比如A頁面向B頁面發送一個請求,B頁面向數據庫中插入數據,如果沒有在B頁面中做有效驗證,任何程序員就可以花不到半個小時的時間寫一個小東西,向B頁面不斷的提交數據,很容易就把數據庫給弄爆了。所以最好別得罪程序員,特別是牛B的程序員。

 

作者:陳太漢

博客:http://www.cnblogs.com/hlxs/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM