前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务项目:尚融宝(36)(核心业务流程:用户绑定(1))

微服务项目:尚融宝(36)(核心业务流程:用户绑定(1))

作者头像
一个风轻云淡
发布2022-11-15 14:45:59
2640
发布2022-11-15 14:45:59
举报
文章被收录于专栏:java学习java

一、运行汇付宝

1、数据库

hfb.sql

2、程序

hfb

3、数据库配置

application-dev.yml 中修改数据库配置

4、启动程序

端口:9999

二、参考文档

1、传入参数

参考《汇付宝商户账户技术文档》业务接口3.1参数说明

2、返回结果

参考《汇付宝商户账户技术文档》业务接口3.2返回/通知结果

3、数据接口

参考《汇付宝商户账户技术文档》业务接口3.3账户绑定

三、账户绑定

1、账户绑定流程

尚融宝应该在网站引导客户在“资金托管平台“开设账户。也就是说投资人和借款人必须在资金托管平台页面上自主开户,与尚融宝建立对应的账户体系。

以后所有的资金操作都会到“资金托管平台”进行,绑定账户流程如图:

2、相关数据库表

一、准备

1、引入HttpUtils

guigu-common中引入HttpUtils工具类 

这个工具类使用了另一个常见的远程连接工具:java.net.HttpURLConnection

代码语言:javascript
复制
<!-- json解析 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
</dependency>

3、添加辅助类

service-core中添加FormHelper:构建表单工具

service-core中添加HfbConst:常量定义

service-core中添加RequestHelper:签名工具

4、定义UserBindVO

service-core中添加

代码语言:javascript
复制
@Data
@ApiModel(description = "账户绑定")
public class UserBindVO {

    @ApiModelProperty(value = "身份证号")
    private String idCard;

    @ApiModelProperty(value = "用户姓名")
    private String name;

    @ApiModelProperty(value = "银行类型")
    private String bankType;

    @ApiModelProperty(value = "银行卡号")
    private String bankNo;

    @ApiModelProperty(value = "手机号")
    private String mobile;
}

5、创建枚举

service-core中创建包enums,创建枚举UserBindEnum

代码语言:javascript
复制
@AllArgsConstructor
@Getter
public enum UserBindEnum {

    NO_BIND(0, "未绑定"),
    BIND_OK(1, "绑定成功"),
    BIND_FAIL(-1, "绑定失败"),
    ;

    private Integer status;
    private String msg;
}

 完整的枚举源代码:资料中 java代码\service-core\enums目录

二、后端接口实现

1、要动态构建的表单模板

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
  <head> </head>
  <body>
    <form name="form" action="远程地址" method="post">
      <!-- 参数 -->
      <input type="text" name="mobile" value="13900000000" />
      <input type="text" name="sign" value="123456" />
    </form>
    <script>
      document.form.submit()
    </script>
  </body>
</html>

2、Controller

UserBindController

代码语言:javascript
复制
@Api(tags = "会员账号绑定")
@RestController
@RequestMapping("/api/core/userBind")
@Slf4j
public class UserBindController {

    @Resource
    private UserBindService userBindService;

    @ApiOperation("账户绑定提交数据")
    @PostMapping("/auth/bind")
    public R bind(@RequestBody UserBindVO userBindVO, HttpServletRequest request) {
        String token = request.getHeader("token");
        Long userId = JwtUtils.getUserId(token);
        String formStr = userBindService.commitBindUser(userBindVO, userId);
        return R.ok().data("formStr", formStr);
    }
}

3、Service

接口:UserBindService

代码语言:javascript
复制
/**
     * 账户绑定提交到托管平台的数据
     */
String commitBindUser(UserBindVO userBindVO, Long userId);

相关常量:HfbConst 

代码语言:javascript
复制
/**
* 用户绑定
*/
//用户绑定汇付宝平台url地址
public static final String USERBIND_URL = "http://localhost:9999/userBind/BindAgreeUserV2";
//用户绑定异步回调
public static final String USERBIND_NOTIFY_URL = "http://localhost/api/core/userBind/notify";
//用户绑定同步回调
public static final String USERBIND_RETURN_URL = "http://localhost:3000/user";

实现:UserBindServiceImpl 

代码语言:javascript
复制
@Override
public String commitBindUser(UserBindVO userBindVO, Long userId) {

    //查询身份证号码是否绑定
    QueryWrapper<UserBind> userBindQueryWrapper = new QueryWrapper<>();
    userBindQueryWrapper
        .eq("id_card", userBindVO.getIdCard())
        .ne("user_id", userId);
    UserBind userBind = baseMapper.selectOne(userBindQueryWrapper);
    //USER_BIND_IDCARD_EXIST_ERROR(-301, "身份证号码已绑定"),
    Assert.isNull(userBind, ResponseEnum.USER_BIND_IDCARD_EXIST_ERROR);

    //查询用户绑定信息
    userBindQueryWrapper = new QueryWrapper<>();
    userBindQueryWrapper.eq("user_id", userId);
    userBind = baseMapper.selectOne(userBindQueryWrapper);

    //判断是否有绑定记录
    if(userBind == null) {
        //如果未创建绑定记录,则创建一条记录
        userBind = new UserBind();
        BeanUtils.copyProperties(userBindVO, userBind);
        userBind.setUserId(userId);
        userBind.setStatus(UserBindEnum.NO_BIND.getStatus());
        baseMapper.insert(userBind);
    } else {
        //曾经跳转到托管平台,但是未操作完成,此时将用户最新填写的数据同步到userBind对象
        BeanUtils.copyProperties(userBindVO, userBind);
        baseMapper.updateById(userBind);
    }

    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("agentId", HfbConst.AGENT_ID);
    paramMap.put("agentUserId", userId);
    paramMap.put("idCard",userBindVO.getIdCard());
    paramMap.put("personalName", userBindVO.getName());
    paramMap.put("bankType", userBindVO.getBankType());
    paramMap.put("bankNo", userBindVO.getBankNo());
    paramMap.put("mobile", userBindVO.getMobile());
    paramMap.put("returnUrl", HfbConst.USERBIND_RETURN_URL);
    paramMap.put("notifyUrl", HfbConst.USERBIND_NOTIFY_URL);
    paramMap.put("timestamp", RequestHelper.getTimestamp());
    paramMap.put("sign", RequestHelper.getSign(paramMap));

    //构建充值自动提交表单
    String formStr = FormHelper.buildForm(HfbConst.USERBIND_URL, paramMap);
    return formStr;

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、运行汇付宝
    • 1、数据库
      • 2、程序
        • 3、数据库配置
          • 4、启动程序
          • 二、参考文档
            • 1、传入参数
              • 2、返回结果
                • 3、数据接口
                • 三、账户绑定
                  • 1、账户绑定流程
                    • 2、相关数据库表
                    • 一、准备
                      • 1、引入HttpUtils
                        • 3、添加辅助类
                          • 4、定义UserBindVO
                            • 5、创建枚举
                            • 二、后端接口实现
                              • 1、要动态构建的表单模板
                                • 2、Controller
                                  • 3、Service
                                  相关产品与服务
                                  数据库
                                  云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档