
安全和穩定是三方支付系統的兩個關鍵要素,系統開發要時刻緊綳這兩根弦。
按上圖來說,
服務器安全和網絡是運維層面的,比如DDos攻擊和流量攻擊,必要時要采購防攻擊設備或軟件。
程序安全,首先程序代碼包要混淆處理,以防泄露。程序實現方面,對外接口涉及到鑒權(簽名,通常用RSA非對稱算法實現)和加解密。尤其要強調的是,對於入金交易,比如用戶支付完成后,當接收到上游渠道的支付結果通知時,除了做必要的校驗外,應該只處理支付“支付完成”的狀態,對於包括“支付失敗”在內的狀態,都可不予處理。同樣,對於出金交易,上游渠道通知我們是出款完成,沒問題。如果告訴我們是失敗,則一定要好好驗證。因為一旦我們程序有疏忽將交易改為出款失敗,那么,就會給商戶重新發起出款帶來可能,這樣,如果前一單實際上也是出款成功,那么,這就造成了所謂的重復出款。 程序留痕(用戶會話數據、操作流水表)也是有必要的,這樣方便追查問題和補償。
數據安全,密碼等口令要加密存儲,注意要采用不可逆的方式。用戶姓名、手機號、銀行卡號、身份證號等要素,要脫敏處理。同樣,日志里是嚴禁打印私鑰或密碼等信息的。
資金安全,三方支付系統必然觸碰資金。而資金的風險常常發生於出款交易。上面也提到了,將一筆交易誤改為出款成功大不了做一些撤回處理,而將一筆出款交易誤改成出款失敗就不僅僅是交罰款那么簡單了。結算處理也會誘發資金損失,我們遇到過結算讀從庫改主庫結果因為主從復制延遲導致重復結算7次的事故。令很多開發團隊頭痛的是批付,很多場景並不那么容易cover到,程序總是在不斷的趟雷踩坑過程中不斷的完善的。系統監控要跟上,否則等到商戶投訴的時候,你還在睡覺,那就遲了。
墨菲定律:Anything that can go wrong will go wrong. 誰也不能保證系統無bug。記住,出bug闊以,但要可控。
