請(qǐng)點(diǎn)擊此處輸入圖片描述
?作為開放式的B/S架構(gòu)程序病苗,無論所屬電商棺棵,金融膝昆,機(jī)械制造泡躯,企業(yè)OA,ERP崎逃,CRM掷倔,CMS等等行業(yè)或系統(tǒng)中,第三方支付以及銀聯(lián)支付的業(yè)務(wù)一定是客戶關(guān)心所在个绍,也是保證客戶系統(tǒng)盈利運(yùn)營(yíng)的一個(gè)重要保障今魔。通常這種B2C或者C2C系統(tǒng)的開發(fā),商戶用戶所關(guān)注的支付平臺(tái)大多離不開“阿里支付寶障贸,快錢错森,騰訊財(cái)付通,易寶支付這種第三方支付平臺(tái)以及中國(guó)銀聯(lián)UnionPay....等等”這些方式篮洁。
最近某項(xiàng)目中涉及到支付的模塊與涉及流程涩维,在此和大家分享一下。
1袁波,名詞釋義
商戶網(wǎng)站:比如淘寶瓦阐,聚美,唯品會(huì)這種B2C/C2C的網(wǎng)站及后臺(tái)的管理系統(tǒng)篷牌,統(tǒng)稱為商戶網(wǎng)站睡蟋;主要負(fù)責(zé)對(duì)買家訂單數(shù)據(jù)的封裝,加密枷颊,
及支付平臺(tái)回調(diào)的訂單處理戳杀。
支付平臺(tái):我們需要開發(fā)的支付平臺(tái),支付接口夭苗,支付模擬的Servlet信卡,暴露出來的WebService接口url等;主要負(fù)責(zé)對(duì)買家請(qǐng)求來的
加密后的訂單數(shù)據(jù)進(jìn)行解密题造,構(gòu)造請(qǐng)求的URL傍菇,拼接參數(shù),對(duì)Sign進(jìn)行加密界赔,對(duì)支付機(jī)構(gòu)異步(或同步)請(qǐng)求回調(diào)的數(shù)據(jù)
進(jìn)行封裝丢习,解密回傳給商戶網(wǎng)站。
支付機(jī)構(gòu):比如阿里支付寶淮悼,快錢咐低,騰訊財(cái)付通,易寶支付這種第三方支付平臺(tái)等支付機(jī)構(gòu)敛惊。
Sign:支付機(jī)構(gòu)為商戶分配的一把“密鑰”與”合作者ID“同時(shí)分配渊鞋,用做調(diào)用Base64,MD5等加密算法在加密解密時(shí)的一種私鑰,通常
與此相關(guān)聯(lián)的還有signType锡宋,就是加密方式儡湾。
回調(diào):對(duì)上次請(qǐng)求端request中的url或指定的url進(jìn)行http請(qǐng)求,或https請(qǐng)求
支付平臺(tái)請(qǐng)求执俩,響應(yīng)徐钠,及回調(diào)流程圖:
請(qǐng)點(diǎn)擊此處輸入圖片描述
2,業(yè)務(wù)流設(shè)計(jì)(本文只介紹alipay的即時(shí)到賬接口:"create_direct_pay_by_user")
2.1??商戶網(wǎng)站對(duì)數(shù)據(jù)封裝加密役首,調(diào)用支付接口:
2.1.1)商戶網(wǎng)站后臺(tái)對(duì)買家的訂單進(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加密算法對(duì)訂單信息進(jìn)行加密
StringSignedJson = CryptUtil.encryptBase64Des(orderJson, key);
2.1.2)于此同時(shí)調(diào)用dao層查詢買家用戶平臺(tái)賬戶余額爹袁,并進(jìn)行鎖表:在SQL的select后加入?forupdate wait n(最好
為1-5秒,此處的?數(shù)值為httpclient請(qǐng)求超時(shí)時(shí)長(zhǎng))為防止訂單被多用戶修改矮固。