關(guān)于支付
現(xiàn)在的電商項(xiàng)目已經(jīng)非?;鸨?,隨之而來的像支付寶,微信等第三方支付也非常的火爆,所以這里簡單的說一下支付寶的支付流程。
支付步驟
工作前準(zhǔn)備
首先我們需要在螞蟻金服官網(wǎng)上面注冊一個(gè)開發(fā)者賬號,上面有關(guān)于開發(fā)者的文檔和需要的SDK到這我們就可以做一些實(shí)質(zhì)性的開發(fā)了。
- 創(chuàng)建應(yīng)用并獲取APPID
- 配置秘鑰
這里會生成RSA秘鑰,(就是一種非對稱的加密)的加密方式
它的秘鑰分成公鑰和私鑰兩類一般是公鑰加密私鑰解密或者私鑰加密公鑰解密
生成秘鑰后在開發(fā)者平臺進(jìn)行秘鑰配置最后就可以得到支付寶的公鑰了
支付寶的支付流程呢
其實(shí)如果我們只想簡單集成一下支付寶的支付,只需要上面的幾步再下載下來官網(wǎng)的Dome就差不多了,但是真正去面試的時(shí)候面試官更多的是關(guān)心支付寶的支付流程,所以這里簡單多支付寶的支付流程說一下:

我們可以簡單的看出整個(gè)支付寶的支付流程設(shè)計(jì)到五大塊,分別是:用戶、商戶客戶端、支付寶客戶端SDK、支付寶服務(wù)端、商戶服務(wù)端其實(shí)也就是說,整個(gè)支付流程就是這五大塊之間的交互,具體的實(shí)現(xiàn)上圖也給的很清晰了(圖中虛線標(biāo)識商戶鏈路,實(shí)線標(biāo)識支付寶鏈路),下面對圖中重要的步驟簡單的介紹:
- 添加購物車,生成待支付訂單,產(chǎn)生唯一訂單號
- 請求商戶服務(wù)端(自己的后臺),在后臺對訂單信息進(jìn)行簽名操作,這里應(yīng)用為了安全考慮,會把似鑰放在服務(wù)端,客戶端只要報(bào)訂單號傳給服務(wù)端,具體簽名在后臺進(jìn)行。
- 服務(wù)端把簽名好的訂單信息返回給客戶端
- 調(diào)用支付接口,把簽名好的訂單信息,通過調(diào)用支付寶API,發(fā)送給支付寶客戶端SDK
- 支付寶客戶端發(fā)起向支付寶服務(wù)端發(fā)起支付請求
- 支付寶客戶端輸入支付密碼。完成支付
- 返回同步結(jié)果給支付寶客戶端
- 支付寶客戶端將接口返回支付結(jié)果給我們的商戶端口,9000支付成功
- 同時(shí)也將支付結(jié)果發(fā)送給了商戶服務(wù)端。驗(yàn)簽,解析支付結(jié)果。將客戶端與服務(wù)端的支付信息進(jìn)行比對,確保訂單支付正確無誤
- 確認(rèn)訂單無誤之后,返回最終支付結(jié)果給商戶端
- 客戶端將訂單支付完成信息在界面顯示,告知用戶支付完成
關(guān)于加密
我們都知道支付的整個(gè)流程都是通過加密完成的(RSA非對稱加密)所以這里簡單的對支付寶中用到的加密流程說一下:
在商戶服端要完成的,商戶客戶端獲取簽名的過程
客戶端準(zhǔn)備好要傳送的數(shù)字信息(訂單信息)
客戶端對數(shù)字信息進(jìn)行哈希運(yùn)算,得到一個(gè)信息摘要
客戶端用自己的似鑰(SK)對對信息摘要進(jìn)行加密得到客戶端的數(shù)字簽名,并將其附在數(shù)字信息上(對數(shù)字簽名進(jìn)行BASE64編碼,)
在支付寶客服端進(jìn)行的操作
A. 客戶端用服務(wù)端的公鑰(PK)對剛才隨機(jī)產(chǎn)生的加密密鑰進(jìn)行加密,將加密后的密文傳送給服務(wù)端
B.服務(wù)端收到客戶端傳送過來的密文,用自己的私鑰對密文進(jìn)行解密
驗(yàn)簽的過程服務(wù)端用客戶端的公鑰對客戶端傳過來的數(shù)字簽名進(jìn)行解密得到信息摘要
服務(wù)端用相同的hash算法對收到的明文再進(jìn)行一次hash運(yùn)算,得到一個(gè)新的信息摘要
服務(wù)端將收到的信息摘要和新產(chǎn)生的信息摘要進(jìn)行比較如果相同,說明信息沒有被修改過可以安全支付
RSA非對稱加密
RSA非對稱加密:RSA算法可以用于數(shù)據(jù)加密和數(shù)字簽名,總原則就是:公鑰和私鑰一個(gè)用來加密一個(gè)用來解密
下面以甲方和乙方來舉個(gè)加密過程的例子:
甲方:商戶客戶端,支付寶客戶端
乙方:支付寶服務(wù)端,商戶服務(wù)端
<h4> 支付加密的模型</h4>
- 甲方在本地構(gòu)建秘鑰對(公鑰+私鑰),并將公鑰告訴乙方
- 甲方將數(shù)據(jù)用私鑰進(jìn)行加密,發(fā)送給乙方
- 乙方用甲方提供的公鑰對數(shù)據(jù)進(jìn)行解密
(當(dāng)然這個(gè)整個(gè)傳遞過程是可以互換的,也可以由乙方傳遞給甲方)

END
到這里支付寶的整個(gè)支付流程和RSA加密就簡單介紹完了,
這里貼一下自己寫的一個(gè)調(diào)取支付寶支付的code,(注意每次支付成功就是支付一分錢,所以請別隨意支付,代碼可運(yùn)行)
項(xiàng)目地址
https://github.com/Qiaoshi96/PayDemo.git
貼一下效果圖