【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
之前的一段时间,忽然被调去开发手机充值功能。犹豫之前没有接触过这方面内容,再加上没有相关文档,开始有点茫然。前前后后花了一周多的时间才完成开发。仅再次记录一些开发中遇到的问题与心得。
功能描述:
业务功能:全国手机充值(移动联通电信三家)
接口描述:光大银行-公共事业缴费接口,由深圳分行提供的全国手机充值业务。
疑惑点:由于充值业务借用了公共事业缴费接口,所以只能采取先查询缴费单再对缴费单进行销账的业务流程。(从逻辑上讲充值业务不应该有先查询动作,因为是业务是预缴费的,不存在应缴费用问题)
业务总流程: 用户输入手机号 -----> ajax判断运营商(获取事业单位编号)----->用户选择金额- ---->下一步 -----> 打开新页面,原页面返回订单信息-----> 查询缴费单, 生成订单 ----->选择支付渠道 ----->用户完成支付 -----> 银行返回响应报文-----> 修改支付订单 -----> 根据支付结果向光大发起销账请求 ----->请求结果展现。
细节:
一:创建手机充值订单信息
根据光大接口查询待缴费的公共事业费账单(查询缴费单,根据光大公共事业缴费规则,只有先查询才能生成供销账的缴费单)
获取BillQueryRecordDTO公共事业单位缴费信息 -----取缴费通讯流水号----组装查询报文----网关发送---获取并解析光大响应 --- 保存缴费单(事实上返回的是原请求数据,目的是根据返回结果判断光大方是否生成缴费单)----缴费单转换成手机充值的支付订单(BillChargeOrderDTO | TB_PY_TRAN_BILL_ORDER)---DB保存缴费订单
二: 确认支付缴费账单
1:设置未支付状态-----根据订单编号查询缴费订单-----保存查询出的缴费订单列表-----从数据库获取支付业务登记流水号-----根据缴费订单列表统计,生成待支付业务登记DTO(PayRegisterInfoDTO | TB_PY_TRAN_PAY_REGISTER)-----根据待支付业务登记信息组织支付订单数据-----获取支付地址,组织商户订单DTO(MerOrderInfoDTO | )----组织前端form重定向需要的信息----将待支付业务登记信息保存到数据库---更新缴费单信息---前端重定向到支付
三:支付环节:
请求:paygate/daysRequest.do
响应:common/paymentResult
发送平台支付请求(银行扣款)-----解析请求报文-----报文数据检查------查询商户信息(MerchantDTO | TB_PY_MER_INFO)----- 创建支付平台订单(PayTranOrderInfoDTO | TB_PY_TRAN_ORDER_INFO) ---loadPayBank.jsp---读取支付银行渠道----常规支付环节---去订单,取商户信息,取可用快捷账户列表等----进入用户银行选择界面
四:用户选择支付方式,并完成支付。
像银行发送支付请求,等待响应 --- common/paymentResult.do ---解析返回结果 ---更新支付登记记录(PayRegisterInfoDTO)-----更新关联缴费单BillChargeOrderDTO-----根据缴费订单信息创建销账流水(BillChargeFlowDTO | TB_PY_TRAN_BILL_FLOW )---根据销账流水组装销账请求报文发送到光大,并及时获取销账响应(该业务立即会有结果)------解析响应信息,根据响应结果更新销账流水-----根据销账流水的状态更新销账订单-----根据缴费订单创建快捷缴费记录(BillChargeOrderDTO)----保存处理结果----充值结束 ---展现。
遗留问题:业务中根据缴费订单创建快捷缴费记录,不明白,为什么要第二天次创建一个新的快捷缴费记录
来源:oschina
链接:https://my.oschina.net/u/1417725/blog/499865