java支付介面開發
阿新 • • 發佈:2019-01-08
業務流程步驟:
1、生成訂單資訊
2、商戶到銀行,商戶發起請求到銀行把訂單資訊的部分資料拼接,然後通過銀行端給的MD5加密工具加密,然後作為引數,通過http的post請求 傳送到支付提供的目標銀行網站。例子:
var bankURL = "b2bpay.ccb.com/NCCB/NECV5B2BPayMainPlat"; // 生產環境的銀行請求地址 tmp = 'MERCHANTID=' + MERCHANTID + '&POSID=' + POSID + '&BRANCHID=' + BRANCHID + '&ORDERID=' + ORDERID + '&PAYMENT=' + PAYMENT + '&CURCODE=' + CURCODE + '&TXCODE=' + TXCODE + '&REMARK1=' + REMARK1 + '&REMARK2=' + REMARK2 + '&PROJECTNO =' + PROJECTNO + '&PAYACCNO=' + PAYACCNO + '&ACCTYPE=' + ACCTYPE + '&ENDTIME =' + ENDTIME + '& TYPE =' + TYPE '& PUB =' + PUB + '& REGINFO =' + REGINFO + '& PROINFO =' + PROINFO + '& REFERER =' + REFERER; // 加密原串 strMD5 = hex_md5(tmp); // 呼叫加密函式生成MAC值對應的加密串 subfor.action = bankURL + '?' + tmp + '&MAC=' + strMD5; var params = tmp + '&MAC=' + strMD5; subform.submit();
3、介面跳轉到支付頁面,客戶在頁面支付成功,銀行進行業務處理
4、銀行到商戶,銀行呼叫商戶介面返回處理結果,商戶接收後驗證數字簽名,更改單據狀態
1)銀行通過MD5withRSA演算法對返回結果進行加密生成數字簽名
2)商戶要預先提供介面給銀行回撥,這個介面一般是在商戶到銀行步驟裡面,我們通過引數傳遞給銀行
3)商戶介面處理過程:
(1) 獲取銀行傳過來的資料;(2) 使用公鑰進行簽名的逆運算(3) 使用標準MD5演算法運算原文(4) 比較(2) 、(3) 結果,如果一樣,驗證簽名成功,更改單據狀態,否則,返回支付失敗等提示資訊
/* * 此例子是post方式 */ /*銀行提供的公鑰*/ String strPubKey = "30819d300d06092a864886f70d010101050003818b00308187028181009d2ac18031a5966ae6bf4ea0c317144d4944beda90ef828298a4b30a4c31a57a8ff921e8b05c6b6b9ae5ef7a984359b6ff46ad5c31fdc8ef24d541defa0d65ecd5aedea19f803742d3526399d9c7cfb795a8edcabb0b9eff58f384074f163f9f646cfc3c6b0730c900ec1acac7b6dc24f949697dbd0f9a0658b5640c37378787020111"; /*從上一表單提取出來要素的值*/ String strSrc="100000037200905090001_sadCQ450533779#0E50001004141059866666重慶市工程建設招標投標交易中心.012N20120904184827上海市http://localhost:8080/WebContent/my_pay.htm"; RSASig rsa = new RSASig(); /*驗籤串*/ String signString = "25ee808325b6e950c29d1fd50e05fc44f4dc9cad7aa0ef430977a4d73f1604196a2adeeb3130f471e2b480e03fedc34a33e874b58cb0c36337ee4090f58a923b03c8f5f4d936b35e46b53c20eedd0116371f8daa1136d7afd12ec2f7cf23af140398ce91d75822297304da6e2db65597a696788b1457fcea2b027ebe6e61eeef"; rsa.generateSigature(strSrc); rsa.setPublicKey(strPubKey); /*驗簽結果判斷*/ if (rsa.verifySigature(signString, strSrc)) { System.out.println("驗籤成功!!"); } else { System.out.println("驗籤失敗!!"); }