银行开发代码分析
一、农业银行
Action: famous.tang.web.home.EBankPayAction
方法:result_agricultural_bank_payment
页面:直接respon到农业
提交到银行方法解析睡美人简笔画
//在后台显示支付银行
tradePay.tPayBank(BankNameEnum.BANK_AGRICULTURAL);
tradePayService.changeTransBank(tradePay, memberId);
// TODO:不同的银行有不通的封装方式
AgriculturalBankData agriculturalBankData = new AgriculturalBankData(order);
/
/2、生成农业银行的订单对象
Order tOrder = new Order();
tOrder.tOrderNo (OrderNo()); //设定订单编号(必要信息)
tOrder.tOrderDesc (OrderDesc()); //设定订单说明
tOrder.tOrderDate (OrderDate()); //设定订单日期(必要信息 - YYYY/MM/DD)
tOrder.tOrderTime (OrderTime()); //设定订单时间(必要信息 - HH:MM:SS)
tOrder.tOrderAmount(Double. OrderAmount())); //设定订单金额(必要信息)
// tOrder.tOrderURL (OrderURL()); //设定订单网址
//4、生成支付请求对象
PaymentRequest tPaymentRequest = new PaymentRequest();
tPaymentRequest.tOrder (tOrder); //设定支付请求的订单(必要信息)
tPaymentRequest.ProductTyp e()); //设定商品种类(必要信息)
//PaymentRequest.PRD_TYPE_ONE:非实体商品,如服务、IP卡、下载MP3、...
//PaymentRequest.PRD_TYPE_TWO:实体商品
学生祛痘tPaymentRequest.PaymentTyp
e()); //设定支付类型
//PaymentRequest.PAY_TYPE_ABC:农行卡支付
//PaymentRequest.PAY_TYPE_INT:国际卡支付
tPaymentRequest.NotifyType( )); //设定商户通知方式
//0:URL页面通知
//1:服务器通知
tPaymentRequest.Market(request, AgriculturalBankData.payBack));//ResultNotify URL()); //设定支付结果回传网址(必要信息)
//梦见海水
饿虎扑食
tPaymentRequest.Mercha ntRemarks()); //设定商户备注信息
tPaymentRequest.Paymen tLinkType());//设定支付接入方式
//5、传送支付请求并取得支付网址
//TrxRespon tTrxRespon = tPaymentRequest.postRequest();
TrxRespon tTrxRespon =
if (tTrxRespon.isSuccess()) {
//6、支付请求提交成功,将客户端导向支付页面
respon.Value("PaymentURL"));
}
el {
//7、支付请求提交失败,商户自定后续动作
return new
ModelAndView("/home/bank/agriculturalBankPayment");
}
return null;
}
银行返回关键代码解析:
Action: famous.tang.web.home. EBankPayReturnAction
方法:agriculturalReturn
页面:/home/bank/paySuccess
// 1、取得MSG参数,并利用此参数值生成支付结果对象
PaymentResult tResult = null;
try {
tResult = new PaymentResult(msg);//农业银行返回结果解密
这个tResult是什么东西,请参考我些的银行开发文档里有详细描述
二、建设银行
Action: famous.tang.web.home. BankPayAction
方法:construction_bank_payment
页面:screen 下的home/bank/constructionBankPayment
提交到银行方法解析
关键代码
//在后台显示支付银行
tradePay.tPayBank(BankNameEnum.Bank_CCB);//设置支付单
tradePayService.changeTransBank(tradePay, memberId);//更新支付单
// TODO:不同的银行有不通的封装方式
ConstructionBankCommData constructionBankCommData = new ConstructionBankCommData(order);//封装建设银行对象
//从rver.properties那得到三个参数
本周工作总结constructionBankCommData.tPosid(this.posid);
constructionBankCommData.tBranchid(this.branchid);
constructionBankCommData.hantid);
String strMD5 =
constructionBankCommHelper.MD5(constructionBankCommData);//通过建设银行给的对象加密
ModelAndView mv = new
ModelAndView("/home/bank/constructionBankPayment");
mv.addObject("order", order);
mv.addObject("bankData", constructionBankCommData);
mv.addObject("MAC", strMD5);
接下来就是页面提交了
银行返回关键代码解析:
Action: famous.tang.web.home. ConstructionBankPayReturnAction 方法:con_b_comm_success
页面:/home/bank/paySuccess
//验签类
RSASig rsa=new RSASig();
rsa.tPublicKey(strPubKey);
樱桃的功效与作用禁忌//验证签名
if( !rsa.verifySigature( strSign,strSrc) ){
logger.debug("银行返回字符串校验未通过");
respon
.tStatus(HttpServletRespon.SC_INTERNAL_SERVER_ERROR);// 500错误
return null;
}
三、工商银行
Action: famous.tang.web.home. BankPayAction
方法:ICBC_bank_payment
页面:screen 下的/home/bank/ICBCBankPayment
提交到银行方法解析
关键代码
//在后台显示支付银行
tradePay.tPayBank(BankNameEnum.Bank_ICBC);
tradePayService.changeTransBank(tradePay, memberId);
// TODO:不同的银行有不通的封装方式
ICBCBankData icbcBankData = new ICBCBankData(order);//封装对象
icbcBankData.Market(request, ICBCBankData.payBack));//设置返回的url
String signData = icbcBankDataanizeSignData();//组织对象
//String signData = icbcBankDataanizeSign();
byte[] byteSrc = Bytes();
char[] keyPass = new String(this.keyPass).toCharArray();
FileInputStream in1 = new FileInputStream(this.bcert);//读取证书
byte[] bcert = new byte[in1.available()];
in1.clo();
FileInputStream in2 = new FileInputStream(this.key);//读取密码
byte[] bkey = new byte[in2.available()];
in2.clo();程度副词有哪些
byte[] sign
=ReturnValue.sign(byteSrc,byteSrc.length,bkey,keyPass);//第一次加密if (sign==null) {
t hrow new ServiceException("数据加密异常");
}el{
//签名后
byte[] EncSign = ReturnValue.ba64enc(sign);
String SignMsgBa64=new String(EncSign).toString(); icbcBankData.tMerSignMsg(SignMsgBa64);
//签名后证书
byte[] EncCert=ReturnValue.ba64enc(bcert);//用ba64算法加密
String CertBa64=new String(EncCert).toString();
icbcBankData.tMerCert(CertBa64);
ModelAndView mv = new
ModelAndView("/home/bank/ICBCBankPayment");
mv.addObject("icbcBankData",icbcBankData);
mv.addObject("order", order);
return mv;
}
//直接页面提交
银行返回关键代码解析:
Action: famous.tang.web.home. ICBCBankPayReturnAction要如何
方法:con_b_ICBC_return
页面:/home/bank/paySuccess
strSign = Parameter("signMsg");
ICBCBankData icbcBankData =
//组装待签名的字符串
strSrc = icbcBankDataanizeSign();
//这部分是解密
byte[] byteSrc = Bytes();
FileInputStream in1 = new FileInputStream(this.pubcert);
byte[] bcert = new byte[in1.available()];
in1.clo();
byte[] DecSign =
ReturnValue.Bytes());//利用ba64解密
i f (bcert!=null){
int
a=ReturnValue.verifySign(byteSrc,byteSrc.length,bcert,DecSign);
if (a==0){//当a等于0就表示支付成功不等于0就是支付失败了
四、浦发银行
Action: famous.tang.web.home. EBankPayAction
方法:spd_bank_payment
页面:screen 下的/home/bank/SPDBankPayment
提交到银行方法解析
关键代码