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("验签失败!!");
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值