需求
放款成功后,借款人可以申请提现。
参考《汇付宝商户账户技术文档》3.15用户申请提现
一、前端整合
pages/user/withdraw.vue
<script> export default { data() { return { fetchAmt: 0, } }, methods: { commitWithdraw() { this.$alert( '<div style="size: 18px;color: red;">您即将前往汇付宝提现</div>', '前往汇付宝资金托管平台', { dangerouslyUseHTMLString: true, confirmButtonText: '立即前往', callback: (action) => { if (action === 'confirm') { this.$axios .$post( '/api/core/userAccount/auth/commitWithdraw/' + this.fetchAmt ) .then((response) => { document.write(response.data.formStr) }) } }, } ) }, }, } </script>
二、提现接口
1、Controller
UserAccountController
@ApiOperation("用户提现") @PostMapping("/auth/commitWithdraw/{fetchAmt}") public R commitWithdraw( @ApiParam(value = "金额", required = true) @PathVariable BigDecimal fetchAmt, HttpServletRequest request) { String token = request.getHeader("token"); Long userId = JwtUtils.getUserId(token); String formStr = userAccountService.commitWithdraw(fetchAmt, userId); return R.ok().data("formStr", formStr); }
2、Service
接口:UserAccountService
String commitWithdraw(BigDecimal fetchAmt, Long userId);
实现:UserAccountServiceImpl
@Resource private UserBindService userBindService; @Resource private UserAccountService userAccountService; @Override public String commitWithdraw(BigDecimal fetchAmt, Long userId) { //账户可用余额充足:当前用户的余额 >= 当前用户的提现金额 BigDecimal amount = userAccountService.getAccount(userId);//获取当前用户的账户余额 Assert.isTrue(amount.doubleValue() >= fetchAmt.doubleValue(), ResponseEnum.NOT_SUFFICIENT_FUNDS_ERROR); String bindCode = userBindService.getBindCodeByUserId(userId); Map<String, Object> paramMap = new HashMap<>(); paramMap.put("agentId", HfbConst.AGENT_ID); paramMap.put("agentBillNo", LendNoUtils.getWithdrawNo()); paramMap.put("bindCode", bindCode); paramMap.put("fetchAmt", fetchAmt); paramMap.put("feeAmt", new BigDecimal(0)); paramMap.put("notifyUrl", HfbConst.WITHDRAW_NOTIFY_URL); paramMap.put("returnUrl", HfbConst.WITHDRAW_RETURN_URL); paramMap.put("timestamp", RequestHelper.getTimestamp()); String sign = RequestHelper.getSign(paramMap); paramMap.put("sign", sign); //构建自动提交表单 String formStr = FormHelper.buildForm(HfbConst.WITHDRAW_URL, paramMap); return formStr; }
三、回调接口
1、Controller
UserAccountController
@ApiOperation("用户提现异步回调") @PostMapping("/notifyWithdraw") public String notifyWithdraw(HttpServletRequest request) { Map<String, Object> paramMap = RequestHelper.switchMap(request.getParameterMap()); log.info("提现异步回调:" + JSON.toJSONString(paramMap)); //校验签名 if(RequestHelper.isSignEquals(paramMap)) { //提现成功交易 if("0001".equals(paramMap.get("resultCode"))) { userAccountService.notifyWithdraw(paramMap); } else { log.info("提现异步回调充值失败:" + JSON.toJSONString(paramMap)); return "fail"; } } else { log.info("提现异步回调签名错误:" + JSON.toJSONString(paramMap)); return "fail"; } return "success"; }
2、Service
接口:UserAccountService
void notifyWithdraw(Map<String, Object> paramMap);
实现:UserAccountServiceImpl
@Transactional(rollbackFor = Exception.class) @Override public void notifyWithdraw(Map<String, Object> paramMap) { log.info("提现成功"); String agentBillNo = (String)paramMap.get("agentBillNo"); boolean result = transFlowService.isSaveTransFlow(agentBillNo); if(result){ log.warn("幂等性返回"); return; } String bindCode = (String)paramMap.get("bindCode"); String fetchAmt = (String)paramMap.get("fetchAmt"); //根据用户账户修改账户金额 baseMapper.updateAccount(bindCode, new BigDecimal("-" + fetchAmt), new BigDecimal(0)); //增加交易流水 TransFlowBO transFlowBO = new TransFlowBO( agentBillNo, bindCode, new BigDecimal(fetchAmt), TransTypeEnum.WITHDRAW, "提现"); transFlowService.saveTransFlow(transFlowBO); }
今日分享
约翰·冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之一。 [1-4] 冯·诺依曼是罗兰大学数学博士,是现代计算机、博弈论、核武器和生化武器等领域内的科学全才之一,被后人称为“现代计算机之父”、“博弈论之父”。 [2-5]
冯·诺依曼先后执教于柏林大学和汉堡大学,1930年前往美国,后入美国籍。 [2-3] 历任普林斯顿大学教授、普林斯顿高等研究院教授,入选美国原子能委员会会员、美国国家科学院院士。 [2-6] 早期以算子理论、共振论、量子理论、集合论等方面的研究闻名,开创了冯·诺依曼代数。 [2-6] 冯·诺依曼第二次世界大战期间曾参与曼哈顿计划,为第一颗原子弹的研制作出了贡献。 [4] [7]
冯·诺依曼1944年与奥斯卡·摩根斯特恩合著《博弈论与经济行为》,是博弈论学科的奠基性著作。 [2-4] [8] 晚年,冯·诺依曼转向研究自动机理论,著有对人脑和计算机系统进行精确分析的著作《计算机与人脑》(1958年),为研制电子数字计算机提供了基础性的方案。 [2-4] 其余主要著作有《量子力学的数学基础》(1926年)、《经典力学的算子方法》、《连续几何》(1960)等。