放弃幻想,认清现实,准备斗争

前端整合

pages/user/bind.vue

commitBind() {
this.$alert(
'<div style="size: 18px;color: red;">您即将前往汇付宝绑定账号</div>',
'前往汇付宝资金托管平台',
{
dangerouslyUseHTMLString: true,
confirmButtonText: '立即前往',
callback: (action) => {
if (action === 'confirm') {
this.$axios
.$post('/api/core/userBind/auth/bind', this.userBind)
.then((response) => {
document.write(response.data.formStr)
})
}
},
}
)
},

四、测试

1、登录

使用借款人账号登录

2、测试

访问 http://127.0.0.1:3000/user/bind

3、结果

尚融宝数据库中创建了user_bind记录

汇付宝数据库中创建了user_bind 和 user_account两条数据记录

一、绑定步骤总结

step1:用户在个人中心点击 “立即开通”  (​http://localhost:3000/user/bind​)

step2:尚融宝展示账户绑定页面

 

微服务项目:尚融宝(37)(核心业务流程:用户绑定(2))_前端

step3:用户填写基本信息(注意:身份证必须是尚未开户),点击“开户”按钮

step4:尚融宝后台创建用户绑定信息(新建user_bind记录)

step5:跳转到汇付宝页面(资金托管接口调用)

 

微服务项目:尚融宝(37)(核心业务流程:用户绑定(2))_前端_02

step7:汇付宝创建绑定账号(新建user_bind和user_account记录)

step8:异步回调:

尚融宝user_bind表更新bind_code字段、status字段

尚融宝user_info表更新 bind_code字段、name字段、idCard字段、bind_status字段

step9:用户点击“返回平台”,返回尚融宝

 

微服务项目:尚融宝(37)(核心业务流程:用户绑定(2))_微服务_03

二、尚融宝回调接口

1、controller

UserBindController中创建回调方法

 

@ApiOperation("账户绑定异步回调")
@PostMapping("/notify")
public String notify(HttpServletRequest request) {
Map<String, Object> paramMap = RequestHelper.switchMap(request.getParameterMap());
log.info("用户账号绑定异步回调:" + JSON.toJSONString(paramMap));

//校验签名
if(!RequestHelper.isSignEquals(paramMap)) {
log.error("用户账号绑定异步回调签名错误:" + JSON.toJSONString(paramMap));
return "fail";
}

//修改绑定状态
userBindService.notify(paramMap);
return "success";
}

2、service

接口:UserBindService

void notify(Map<String, Object> paramMap);

实现:UserBindServiceImpl 

@Resource
private UserInfoMapper userInfoMapper;

@Override
@Transactional(rollbackFor = Exception.class)
public void notify(Map<String, Object> paramMap) {

String bindCode = (String)paramMap.get("bindCode");
//会员id
String agentUserId = (String)paramMap.get("agentUserId");

//根据user_id查询user_bind记录
QueryWrapper<UserBind> userBindQueryWrapper = new QueryWrapper<>();
userBindQueryWrapper.eq("user_id", agentUserId);

//更新用户绑定表
UserBind userBind = baseMapper.selectOne(userBindQueryWrapper);
userBind.setBindCode(bindCode);
userBind.setStatus(UserBindEnum.BIND_OK.getStatus());
baseMapper.updateById(userBind);

//更新用户表
UserInfo userInfo = userInfoMapper.selectById(agentUserId);
userInfo.setBindCode(bindCode);
userInfo.setName(userBind.getName());
userInfo.setIdCard(userBind.getIdCard());
userInfo.setBindStatus(UserBindEnum.BIND_OK.getStatus());
userInfoMapper.updateById(userInfo);
}