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("验签失败!!");
		}



你可能感兴趣的:(java编程)