java建行支付_微信小程序,调用建行支付。

本文档展示了如何使用Java实现微信小程序调用建设银行支付的完整流程,包括添加订单、预支付和支付结果通知。在添加订单时设置支付渠道为建行支付,支付接口中处理回调逻辑,并通过RSA签名验证确保交易安全。
摘要由CSDN通过智能技术生成

/*** 统一添加订单

*

*@parampaymentOrder

*@return

*/@WeiXinLogin

@RequestMapping("/addOrder")publicResponseModel addOrder(OrderVO orderVO) {

LoginUserVO user=RequestContext.getContext().getUser();

String key= PAYMENT_ORDER_ADD_LOCK_KEY +user.getMemberId();try{

orderVO.setMemberId(user.getMemberId());

orderVO.setOrderNo(wechatOrderNo.nextId()+ "");

orderVO.setPayType(PayType.CCBPAY);//订单支付渠道为建行

if (redisLockUtil.tryLock(key, 10)) {

Integer orderId=orderApi.addOrder(orderVO);return newResponseModel(orderId);

}else{return new ResponseModel(ErrorCode.BIZ_EXCEPTION.getErrcode(), "操作过于频繁", null);

}

}catch(BizException e) {

LOGGER.error("addOrder error,{}", e);return new ResponseModel(e.getErrcode(), e.getErrm(), null);

}finally{

redisLockUtil.unlock(key);

}

}/*** 支付

*@paramorderId

*@paramrequest

*@return*@throwsException*/@WeiXinLogin

@RequestMapping("/prePay")public ResponseModel prePay(Integer orderId, HttpServletRequest request) throwsException {

String key= PAYMENT_ORDER_PREPAY_LOCK_KEY +orderId;try{

LoginUserVO user=RequestContext.getContext().getUser();

PaymentOrderRecord orderRecord=orderApi.getOrderById(orderId);

PayRequestInfo payRequestInfo= newPayRequestInfo();

payRequestInfo.setBody("xxx缴费");

payRequestInfo.setNotifyUrl(systemConfig.getPayNotifyUrl());//该回调地址只是微信支付,与建行支付没关系 如果是建行支付直接忽略这行代码

payRequestInfo.setOpenId(user.getAppOpenId());

payRequestInfo.setOrderNo(orderRecord.getOrderNo());

payRequestInfo.setOrderPrice(orderRecord.getOrderPrice());

payRequestInfo.setPayType(orderRecord.getPayType());

payRequestInfo.setSpbillCreateIp(getIpAddr(request));

payRequestInfo.setTradeType("MINIPRO");

payRequestInfo.setAppId(systemConfig.getAppletsAppId());

String randomNum= System.currentTimeMillis() + new Random().nextInt(10000) + "";if (redisLockUtil.tryLock(key, randomNum, 5)) {

PayResult payResult=payApi.pay(payRequestInfo);return newResponseModel(payResult);

}else{return new ResponseModel(ErrorCode.BIZ_EXCEPTION.getErrcode(), "操作过于频繁", null);

}

}catch(BizException e) {

LOGGER.error("prePay error,{}", e);return new ResponseModel(e.getErrcode(), e.getErrm(), null);

}finally{

redisLockUtil.unlock(key);

}

}/*** 建行支付结果通知

*

*@paramrequest

*@return

*/@RequestMapping("/callBackCCB")publicString callBackCCB(HttpServletRequest request) {

LOGGER.info("callBackCCB start!");try{

Map map = new HashMap();

Enumeration parameterNames =request.getParameterNames();

StringBuilder data= newStringBuilder();while(parameterNames.hasMoreElements()) {

String name=(String) parameterNames.nextElement();

String value=request.getParameter(name);

map.put(name, value);

data.append(name).append("=").append(value).append("&");

}

LOGGER.info("callBackCCB source data :[{}]", data.toString());//建行返回调原数据

StringBuilder sb = newStringBuilder();

sb.append("POSID=").append(map.get("POSID")).append("&BRANCHID=").append(map.get("BRANCHID"))

.append("&ORDERID=").append(map.get("ORDERID")).append("&PAYMENT=").append(map.get("PAYMENT"))

.append("&CURCODE=").append(map.get("CURCODE")).append("&REMARK1=").append(map.get("REMARK1"))

.append("&REMARK2=").append(map.get("REMARK2")).append("&ACC_TYPE=").append(map.get("ACC_TYPE"))

.append("&SUCCESS=").append(map.get("SUCCESS")).append("&TYPE=").append(map.get("TYPE"))

.append("&REFERER=").append(map.get("REFERER")).append("&CLIENTIP=").append(map.get("CLIENTIP"))

.append("&ACCDATE=").append(map.get("ACCDATE"));

RSASig rsaSig= newRSASig();

rsaSig.setPublicKey(CCBConstants.PUBLICKEY);//公钥

boolean flag = rsaSig.verifySigature(map.get("SIGN"), sb.toString());

LOGGER.info("callBackCCB Check :[{}]", flag);if ("Y".equals(map.get("SUCCESS")) &&flag) {//表示支付成功

CallbackResult callbackResult= newCallbackResult();

callbackResult.setReturnCode("Y");

callbackResult.setReturnMsg("Ok");

callbackResult.setOrderNo(map.get("ORDERID"));//订单号

payApi.callBack(callbackResult);

}

}catch(Exception e) {

LOGGER.error("callBackCCB error,{}", e);

}return null;

}

//PayApi 接口的实现类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值