安卓云管理平台-支付功能设计文档
文章目录
历史修改记录
日期 | 版本 | 描述 | 作者 |
---|
1 需求分析
1.1 背景
安卓云手机运营,与支付有关的功能必不可少,用来保障支付的准确性
关于OrderResponse 的 subecode字段 表示接口调用无错误信息 即调用成功
https://opendocs.alipay.com/open/common/105806
public boolean isSuccess() {
return StringUtils.isEmpty(this.subCode);
}
1.2 需求描述
- 支付宝/微信 支付功能(订单超时关闭)
- 支付宝/微信 支付异步通知功能
- 支付宝/微信 支付订单的查询功能
- 支付宝/微信 创建订单功能
- 支付宝/微信 订单关闭功能
- 支付宝/微信 订单退款功能(废弃)
- 支付宝/微信 订单退款异步通知功能(废弃)
- 支付宝/微信 订单退款查询功能(废弃)
- 定时器功能
2 总体设计
2.1 设计思路描述
- 订单超时关闭:统一支付接口中设置超时时间后订单将自动关闭
- 异步通知:订单支付或退款动作中设置notify_url,返回的订单结果数据,可用查询替代
- 使用策略模式,对外只暴露以下四个接口,实现对内的封装
支付
退款
支付异步通知
退款异步通知 - 定时器功能:使用Java的定时器线程池,基于阻塞队列开发,定时调度时间采用spring提供的cron表达式配置方式
2.2 详细描述
-
策略模式:用于匹配支付渠道和支付动作,减少if/else语句的使用
支付渠道:微信,支付宝等
支付动作:1-查询订单,2-关闭订单,3-创建订单,4-支付订单,5-查询退款,6-申请退款等
支付:1-查询订单,2-关闭订单,3-创建订单,4-支付订单
退款:5-查询退款,6-申请退款
支付异步通知:订单支付过程中设置notify_url,指向notify_url返回的订单结果数据
异步通知:订单退款过程中设置notify_url,指向notify_url返回的订单结果数据 -
定时器功能
1.创建一个定时器
2.使输入参数为时间,方法,类型
3.将任务放进队列,使任务定时执行,满足判断条件后关闭线程,任务结束
2.3 时序图
- 支付接口
- 支付异步通知接口
- 退款接口
- 退款异步通知接口
2.4 程序设计
-
策略模式详情图
-
-
定时器详情图 使用延迟队列插件
2.5 接口设计
| 接口地址 | /v1/order/pay | v1/order/notifiyPay | /v1/order/refund | /v1/order/notifiyRefund |
|:— |:— |
| 接口描述 | 支付接口 | 支付异步通知接口 | 退款接口 | 退款异步通知接口 |
| 接口入参 |
| 参数名 | 参数类型 | 参数描述 | 参数字典 | 备注 |
| channelKey | String | 支付渠道 | wx(微信) ali(支付宝) |
| orderType | Int | 支付动作(类型) | 1(查询订单) 2(关闭订单) 3(创建订单) 4(支付订单) 5(查询退款) 6(申请退款) |
| OrderRequest | OrderRequest | 实体类属性 | outOrderId(商户订单号) | 实体类 |
| 接口出参 |
| 参数名 | 参数类型 | 参数描述 | 参数字典 | 备注 |
| OrderResponse | OrderResponse | 实体类属性 | resultCode(业务结果) resultDes(业务结果描述) returnCode(微信返回的状态码) orderStatus(订单状态) outTradeNo(第三方支付流水号) orderId(数据库里的商户订单号) resultMsg(微信/支付宝错误描述) finishTime(支付完成时间) subCode(业务返回码) | 实体类 |
2.6 测试要点
postman/swagger的单元测试,测试范围为验证需求中的支付动作是否准确