請點擊此處輸入圖片描述
?作為開放式的B/S架構(gòu)程序,無論所屬電商,金融,機(jī)械制造,企業(yè)OA,ERP,CRM,CMS等等行業(yè)或系統(tǒng)中,第三方支付以及銀聯(lián)支付的業(yè)務(wù)一定是客戶關(guān)心所在,也是保證客戶系統(tǒng)盈利運營的一個重要保障。通常這種B2C或者C2C系統(tǒng)的開發(fā),商戶用戶所關(guān)注的支付平臺大多離不開“阿里支付寶,快錢,騰訊財付通,易寶支付這種第三方支付平臺以及中國銀聯(lián)UnionPay....等等”這些方式。
最近某項目中涉及到支付的模塊與涉及流程,在此和大家分享一下。
1,名詞釋義
商戶網(wǎng)站:比如淘寶,聚美,唯品會這種B2C/C2C的網(wǎng)站及后臺的管理系統(tǒng),統(tǒng)稱為商戶網(wǎng)站;主要負(fù)責(zé)對買家訂單數(shù)據(jù)的封裝,加密,
及支付平臺回調(diào)的訂單處理。
支付平臺:我們需要開發(fā)的支付平臺,支付接口,支付模擬的Servlet,暴露出來的WebService接口url等;主要負(fù)責(zé)對買家請求來的
加密后的訂單數(shù)據(jù)進(jìn)行解密,構(gòu)造請求的URL,拼接參數(shù),對Sign進(jìn)行加密,對支付機(jī)構(gòu)異步(或同步)請求回調(diào)的數(shù)據(jù)
進(jìn)行封裝,解密回傳給商戶網(wǎng)站。
支付機(jī)構(gòu):比如阿里支付寶,快錢,騰訊財付通,易寶支付這種第三方支付平臺等支付機(jī)構(gòu)。
Sign:支付機(jī)構(gòu)為商戶分配的一把“密鑰”與”合作者ID“同時分配,用做調(diào)用Base64,MD5等加密算法在加密解密時的一種私鑰,通常
與此相關(guān)聯(lián)的還有signType,就是加密方式。
回調(diào):對上次請求端request中的url或指定的url進(jìn)行http請求,或https請求
支付平臺請求,響應(yīng),及回調(diào)流程圖:
請點擊此處輸入圖片描述
2,業(yè)務(wù)流設(shè)計(本文只介紹alipay的即時到賬接口:"create_direct_pay_by_user")
2.1??商戶網(wǎng)站對數(shù)據(jù)封裝加密,調(diào)用支付接口:
2.1.1)商戶網(wǎng)站后臺對買家的訂單進(jìn)行封裝,插入商戶網(wǎng)站db中的訂單表(比如:xxx_order);
PayReturnVovo = new PayReturnVo();
vo.setOrderId("kuaiqian00232");
vo.setOrderAmount("20");
vo.setOrderTime("20140504121020");
vo.setProductName("3M網(wǎng)線,送水晶頭");
vo.setProductId("2213229319378");
vo.setProductNum("2");
vo.setPayType("00");*/
//???把模擬的表單數(shù)據(jù)轉(zhuǎn)成Json
StringorderJson=?PaymentJsonUtil.beanToJson(vo);
//???通過db獲取商家key密鑰
Stringkey = dao.getKeyByUserId(userId);
//???根據(jù)key使用base64加密算法對訂單信息進(jìn)行加密
StringSignedJson = CryptUtil.encryptBase64Des(orderJson, key);
2.1.2)于此同時調(diào)用dao層查詢買家用戶平臺賬戶余額,并進(jìn)行鎖表:在SQL的select后加入?forupdate wait n(最好
為1-5秒,此處的?數(shù)值為httpclient請求超時時長)為防止訂單被多用戶修改。