支付

工作遇到很多支付,为了方便大家理解,梳理成相关流程。

订单生命周期

[*] --> ORDER_NEW 
ORDER_NEW : 创建订单
ORDER_PENDING: 订单支付中
ORDER_COMPLETED: 订单支付完成
ORDER_FINALLY_FINISHED: 权益发放完成
REFUND_WITHOUT_RIGHTS_NEW: 权益未到账退款
REFUND_WITH_RIGHTS_NEW: 权益已到账退款
REFUND_PENDING:退款进行中
REFUND_COMPLETED: 退款完成
state E1 <<end>>
state E2 <<end>>
state E3 <<end>>
state E4 <<end>>
state E5 <<end>>
state E6 <<end>>
state E7 <<end>>

state C1 <<choice>>
state C2 <<choice>>
state C3 <<choice>>
state C4 <<choice>>

ORDER_NEW --> C1
C1 -r-> E1 : ORDER_REMOVE\n移除购物车




C1 --> ORDER_PENDING: 开始购买 

ORDER_PENDING -d-> C2
ORDER_PENDING --> ORDER_PENDING : 支付中可包含多个动作

C2 -r-> E2: ORDER_EXPIRED\n订单到期
C2 -l-> E3: ORDER_CANCEL\n订单取消


C2 -d-> ORDER_COMPLETED


ORDER_COMPLETED --> C3

C3 --> REFUND_WITHOUT_RIGHTS_NEW

C3 -r-> ORDER_FINALLY_FINISHED
ORDER_FINALLY_FINISHED -r-> E4 : NO_REFUND\n退款周期内未退款
ORDER_FINALLY_FINISHED --> REFUND_WITH_RIGHTS_NEW
REFUND_WITHOUT_RIGHTS_NEW -r-> REFUND_WITH_RIGHTS_NEW
REFUND_WITHOUT_RIGHTS_NEW --> E5 : REFUND_FINALLY_FINISHED\n权益追回完成 
REFUND_WITH_RIGHTS_NEW --> REFUND_PENDING


REFUND_PENDING --> C4
REFUND_PENDING --> REFUND_PENDING : 退款中可包含多个动作

C4 -l-> E6: REFUND_CANCEL\n退款取消
C4 --> REFUND_COMPLETED

REFUND_COMPLETED --> E7: REFUND_FINALLY_FINISHED\n权益追回完成

订单逻辑

苹果和Google
title 苹果
客户端 -->服务器:充值列表或者商品列表
客户端 -->服务器:下单
服务器 -->客户端:订单号
客户端 -->苹果: 进行支付
苹果 -->客户端:支付凭证
客户端 -->服务器:支付凭证
服务器 --> 苹果: 支付验证
服务器 -->服务器:增加权益
服务器 -->客户端:权益发放成功
title 苹果 -内部调用
客户端 -->api:充值列表或者商品列表
客户端 -->api:下单
api -->客户端:订单号
客户端 -->苹果: 进行支付
苹果 -->客户端:支付凭证
客户端 -->pay:支付凭证
pay --> 苹果: 支付验证
pay -->finance:增加金币权益
pay --> pay: 内部处理其他权益
pay -->客户端:权益发放成功
title Google
客户端 -->服务器:充值列表或者商品列表
客户端 -->服务器:下单
服务器 -->客户端:订单号
客户端 -->Google: 进行支付
Google -->客户端:支付凭证
客户端 -->服务器:支付凭证
服务器 --> Google: 支付验证
服务器 -->服务器:增加权益
服务器 -->Google:增加权益完成确认
服务器 -->客户端:权益发放成功
客户端 -->Google: 消费
title Google -内部调用
客户端 -->api:充值列表或者商品列表
客户端 -->api:下单
api -->客户端:订单号
客户端 -->Google: 进行支付
Google -->客户端:支付凭证
客户端 -->pay:支付凭证
pay --> Google: 支付验证
pay -->finance:增加金币权益
pay --> pay: 内部处理其他权益
pay -->Google:增加权益完成确认
pay -->客户端:权益发放成功
客户端 -->Google: 消费
title paypal
浏览器 -->服务器:充值列表
浏览器 -->服务器:下单
服务器 --> paypal: 拿到Token
服务器 -->浏览器:订单号
浏览器 --> paypal:登录
paypal --> 浏览器: 支付类型渠道方式选择
浏览器 --> 服务器:验证
服务器 --> paypal:扣款
服务器 -->浏览器:扣款状态
浏览器 -->浏览器:重定向状态页面
title paypal --内部调用
浏览器 -->www:充值列表
浏览器 -->www:下单
www --> paypal: 拿到Token
www -->浏览器:订单号
浏览器 --> paypal:登录
paypal --> 浏览器: 支付类型渠道方式选择
浏览器 --> www:验证
www --> paypal:扣款
www -->finance:增加金币权益
www --> www: 内部处理其他权益
www -->浏览器:扣款状态
浏览器 -->浏览器:重定向状态页面
title www-aliPay
浏览器 -->服务器:充值列表
浏览器 -->服务器:下单
服务器 --> 浏览器: 重定向阿里支付地址\n(包含回调地址、成功重定向地址)
浏览器 -->aliPay: 支付(登录或者二维码)
aliPay --> 服务器: 回调
服务器 --> aliPay: 订单校验
服务器 -->服务器:权益发放
服务器 --> aliPay: 权益发放完成通知
aliPay -->浏览器:成功重定向地址
title www-aliPay内部调用
浏览器 -->www:充值列表
浏览器 -->www:下单
www --> 浏览器: 重定向阿里支付地址\n(包含回调地址、成功重定向地址)
浏览器 -->aliPay: 支付(登录或者二维码)
aliPay --> www: 回调
www --> aliPay: 订单校验
www -->finance:增加金币权益
www --> www: 内部处理其他权益
www --> aliPay: 权益发放完成通知
aliPay -->浏览器:成功重定向地址
title api-aliPay
客户端 -->服务器:充值列表
客户端 -->服务器:下单
服务器 --> aliPay: 应用校验\n发给阿里回掉地址和订单信息
aliPay --> 服务器: 下单结果
服务器 -->客户端: 下单结果
客户端 --> aliPay: 进行支付成功
客户端 -->客户端: 成功页面
aliPay -->服务器:回调
服务器 -->服务器:回调签名校验(RSA)
服务器 -->服务器: 权益发放
服务器 --> 客户端: 权益发放完成通知(系统推送和CMD)
服务器 --> aliPay: 权益发放完成通知
title api-aliPay-内部调用
客户端 -->api:充值列表
客户端 -->api:下单
api --> aliPay: 应用校验\n发给阿里回掉地址和订单信息
aliPay --> api: 下单结果
api -->客户端: 下单结果
客户端 --> aliPay: 进行支付成功
客户端 -->客户端: 成功页面
aliPay -->pay:回调
pay -->pay:回调签名校验(RSA)
pay -->finance:增加金币权益
pay --> pay: 内部处理其他权益
pay --> 客户端: 权益发放完成通知(系统推送和CMD)
pay --> aliPay: 权益发放完成通知
title api-wechatPay
客户端 -->服务器:充值列表
客户端 -->服务器:下单
服务器 --> wechatPay: 应用校验\n发给腾讯回掉地址和订单信息
wechatPay --> 服务器: 下单结果
服务器 -->客户端: 下单结果
客户端 --> wechatPay: 进行支付成功
客户端 -->客户端: 成功页面
wechatPay -->服务器:回调
服务器 -->服务器:回调签名校验(Md5+appSecret)
服务器 --> wechatPay: 进行订单号和金额校验和状态
服务器 -->服务器: 权益发放
服务器 --> 客户端: 权益发放完成通知(系统推送和CMD)
服务器 --> wechatPay: 权益发放完成通知
title api-wechatPay
客户端 -->api:充值列表
客户端 -->api:下单
api --> wechatPay: 应用校验\n发给腾讯回掉地址和订单信息
wechatPay --> api: 下单结果
api -->客户端: 下单结果
客户端 --> wechatPay: 进行支付成功
客户端 -->客户端: 成功页面
wechatPay -->pay:回调
pay -->pay:回调签名校验(Md5+appSecret)
pay --> wechatPay: 进行订单号和金额校验和状态
pay -->finance:增加金币权益
pay --> pay: 内部处理其他权益
pay --> 客户端: 权益发放完成通知(系统推送和CMD)
pay --> wechatPay: 权益发放完成通知