014-移动支付12-SDK设计-整体结构原理与设计
一、支付总结分析
1、微信支付
-
服务器:实际上做的事情就是组装支付Model
-
客户端:解析Model,根据Model调起微信支付
2、银联支付
-
服务器:实际上就是组装支付Model(组装支付数据)
-
客户端:解析Model,根据Model调起银联支付
3、支付宝支付
-
服务器:实际上就是组装Model
-
客户端:解析Model,根据Model调起支付宝支付
假如再把苹果支付,QQ钱包等也算在内,本质上也是服务器组装Model然后客户端解析Model并且调起支付。
总结:所有第三方支付都是同一个目的
4、以支付宝为案例,细分一下逻辑:
4.1、客户端请求商户服务器,目的:获取支付签名信息支付Model
4.2、客户端服务器访问支付宝服务器
4.3、支付宝服务器返回预支付结果
4.4、商户服务器返回客户端组装支付Model
4.5、商户客户端调起支付客户端
4.6、支付SDK调用支付服务器
4.7、支付宝服务器返回支付结果
4.8、支付SDK回调商户客户端,提示用户(刷新UI)
4.9、支付宝服务器通知商户服务器
注:第4.9步一般会延迟执行。大致流程如上,错误及详细细节不述。
二、分析Model
在查看各种不同平台的参数的时候回发现参数是不一样的。那我们怎么办呢?
1、找相同点,分析并找到所有支付都有的参数,这样就形成了抽象类,也就是基类。(BaseModel或者叫BaseBean)
2、不同点处理:定义差异化Model
差异化的Model继承自BaseModel或BaseBean。(客户端习惯叫Model服务器习惯叫Bean本质都是模型)
以Ping++为例,在设计SDK的时候整体就是这样的。虽然Ping++客户端并没有开源,但是Java服务器端部分代码是开源的,阅读之可以证实就是这么设计的。
三、客户端支付SDK整体架构分析
1、解析Model,调用具体的支付平台
问题来了:我们发现,在使用微信客户端支付时,会调用商户服务器,返回支付Model后再调用微信支付SDK。而在使用银联支付时,也会调用商户服务器,返回支付Model后再调用银联支付SDK。那我们要怎么进行封装呢?SDK又该怎么设计呢?
分析之后,我们可以针对SDK的调用进行设计。
调用自己商户服务器不需要封装,因为会有差异化。
不同服务器,参数支付需要的列表不一致,需求也是不一样!
2、子模块:服务器组装Model解析、异常处理、Log统计、时间点击统计等等子模块不细述了。
整体思路同上即可。
下一篇:015-CFBridgingRelease简析