1. 程式人生 > >java支付介面開發

java支付介面開發

業務流程步驟:

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("驗籤失敗!!");
		}