3 用户开户
3.1 需求分析 开户是指借款用户和投资用户在注册后、交易前都需要在银行存管系统开通个人存管账户,在开户流程 中银行存管系统是一个很重要的系统,它是当前P2P平台最常见的一种模式,为了保证资金不流向P2P 平台,由银行存管系统去管理借款用户和投资用户的资金,P2P平台与银行存管系统进行接口交互为借 款用户和投资用户搭建交易的桥梁,它们之间的关系如下:
第一阶段:生成开户数据(图中1.1-1.8)
1、前端填写开户信息 前端会先查询开户信息,如果曾经填写了开户信息则在界面直接显示,用户可以修改; 如果曾经没有填 写开户信息则用户在界面填写开户信息
2、前端请求用户中心服务开户
3、用户中心服务准备开户数据,并把开户信息保存到用户中心
4、用户中心服务请求存管代理服务生成交易记录(未同步),并对开户数据进行签名
5、存管代理服务将签名后的开户数据返回给用户中心
6、用户中心将开户数据返回给前端 第二阶段:请求开户(图中2.1-2.8)
7、前端携带开户信息请求银行存管系统
8、银行存管系统向前端返回开户信息确定页面
9、前端确认完成提交开户请求到银行存管系统
10、银行存管系统接收开户数据并进行校验,校验银行卡信息,信息无误则将开户信息保存至存管系统 (校验过程中存管系统会请求开户银行校验银行卡信息)
第三阶段:开户结果通知(图中3.1-3.4)
11、开户成功后,银行存管系统异步通知存管代理服务
12、存管代理服务接收到开户成功通知后更新交易状态为同步
13、存管代理服务通知用户中心服务
14、用户中心服务接收到开户成功的消息保存开户信息
3.3 第一阶段: 生成开户数据
3.3.1 需求分析
1. 参考前面的“开户业务流程图”,熟悉该阶段的具体需求和业务流程
2. 查阅银行存管系统接口说明.pdf中的“个人绑卡开户”接口说明,熟悉接口接收参数和返回值
3.3.2 接口定义
3.3.2.1 用户中心生成开户数据接口
1. 在wanxinp2p-api工程中的ConsumerAPI接口中新增createConsumer方法:
/**
* 生成开户请求数据
* @param consumerRequest 开户信息
* @return
*/
RestResponse<GatewayRequest> createConsumer(ConsumerRequest consumerRequest);
2. 在wanxinp2p-consumer-service工程的ConsumerController类中实现该方法:
@Override
@ApiOperation("生成开户请求数据")
@ApiImplicitParam(name = "consumerRequest", value = "开户信息", required = true,
dataType = "ConsumerRequest", paramType = "body")
@PostMapping("/my/consumers")
public RestResponse<GatewayRequest> createConsumer(@RequestBody ConsumerRequest
consumerRequest) {
return null;
}
启动该工程进行环境测试(注意设置启动参数:-Denv=dev -Dapollo.cluster=DEFAULT - Dserver.port=53070)
2. 在wanxinp2p-api工程中新建depository包,在该包中新建一个DepositoryAgentApi的接口,然 后定义createConsumer方法:
/**
* 银行存管系统代理服务API
*/
public interface DepositoryAgentApi {
/**
* 开通存管账户
* @param consumerRequest 开户信息
* @return
*/
RestResponse<GatewayRequest> createConsumer(ConsumerRequest
consumerRequest);
}
3. 在wanxinp2p-depository-agent-service工程中定义DepositoryAgentController类,并实现 createConsumer方法:
/**
* 存管代理服务
*/
@Api(value = "存管代理服务", tags = "depository-agent")
@RestController
public class DepositoryAgentController implements DepositoryAgentApi {
@Override
@ApiOperation("生成开户请求数据")
@ApiImplicitParam(name = "consumerRequest", value = "开户信息", required =
true,
dataType = "ConsumerRequest", paramType = "body")
@PostMapping("/l/consumers")
public RestResponse<GatewayRequest> createConsumer(@RequestBody
ConsumerRequest
consumerRequest) {
return null;
}
}
开户的过程就是整体完成了,中间的代码过多,不过基本上按着讲义来都可以按量完成,这个是开户的业务,下面就是投标的业务和中标的业务