探讨在线支付平台的实现 今天药忘吃喽~ 2022-08-09 13:56 182阅读 0赞 1.1 支付平台的接入 1.2 支付请求、支付结果返回的传输安全 1.3 支付站点、商户站点、银行网关的交互 1.4 支付状态不同步的处理 ## 1.1 支付平台的接入 ## 支付平台可以避免商户站点去实现多种支付方式的对接,而只需要与支付平台对接。 商户站点接入支付平台,支付平台接入各银行支付网关,示意如下: ![image001.png][] ## 1.2 支付请求、支付结果返回的传输安全 ## 商户站点以POST方式发送支付请求到支付平台的安全考虑,简述如下: 商户站点生成POST支付请求表单时对表单参数附加上商户密钥一起进行MD5签名,商户密钥由支付平台和商户各执一份,并且支付平台保证商户密钥与其它商户不相同,其他商户无法伪造MD5签名,当支付请求到达支付平台后,支付平台使用商户密钥按相同算法生成MD5签名,然后验证商户发送过来的MD5签名是否与支付平台生成的一致,从而可以保证支付请求不可篡改及伪造,对支付平台通过POST方式发送支付结果信息到商户站点进行相同处理方式。 商户站点发送信息到支付平台,示意图如下: ![image002.png][] 说明如下: 1) 商户站点有一个参数串M 2) 商户站点用摘要算法计算出“M+商户密钥”的消息摘要MD 3) 商户站点将参数串M和MD合并在一起,通过网络传送到支付平台 4) 支付平台收到商户站点的参数串M和MD 5) 支付平台采用相同摘要算法对“M+商户密钥”重新计算消息摘要得到MD' 6) 支付平台比较MD与MD'是否相等 7) 如果结果相等,则表明参数串M在传输过程中未被篡改 时序图如下: ![image003.jpg][] ## 1.3 支付站点、商户站点、银行网关的交互 ## 支付站点、商户站点、银行网关的交互,如下图所示: ![image004.png][] 详细说明如下: 1) 用户通过浏览器浏览商户站点选购商品,确认购买后点击“立刻购买”提交到商户站点 2) 商户站点显示订单信息给用户 3) 用户点击“下一步”后,提交到支付平台 4) 支付平台返回选择支付方式页面 5) 用户选择支付方式,点击“下一步”,提交到支付平台 6) 支付平台生成确认界面返回给用户 7) 用户核对信息,点击“去银行支付”,提交到银行支付网关 8) 银行网关返回支付信息录入页面给用户 9) 用户输入相应的银行卡卡号、密码等信息,然后提交到银行网关 10) 银行网关验证用户数据,并按照银行网关接口规范将处理结果发送给支付平台 11) 支付平台验证数据并进行订单状态、商户余额等处理,并返回通知确认到银行网关 12) 支付平台异步调用商户站点页面(同步商户订单状态等) 13) 商户站点显示支付结果给用户,完成整个支付流程 直连银行交互,如下图所示: ![image005.png][] 总业务说明: ![image006.png][] 网上支付业务流程(各银行网关接口实现方式略有不同),说明如下: 1) 用户通过浏览器浏览商户站点选购商品,放入购物车后点击“立刻购买”提交到商户站点 2) 商户站点显示订单信息给用户 3) 用户选择相应的支付方式,选择“下一步”,提交到商户站点 4) 商户站点根据支付平台的接口文档要求,生成去银行支付表单页面给用户 5) 用户点击“去银行支付”,提交到支付平台 6) 支付平台验证该支付订单的商户身份、数据有效性,并转交支付命令到银行网关 7) 银行网关生成支付页面显示给用户 同时在用户浏览器与支付网关之间建立SSL连接 8) 用户输入相应的银行卡卡号、密码等信息,然后提交到银行网关 9) 银行网关验证用户数据,并按照银行网关接口规范将处理结果发送给支付平台 银行网关转发到银行后台业务系统,银行后台业务系统处理后返回处理结果给银行网关 10) 支付平台验证数据并进行订单状态、商户余额等处理,并返回通知确认到银行网关 11) 支付平台异步调用商户站点页面(同步商户订单状态等) 12) 浏览器重定向到商户站点页面 13) 商户站点显示支付结果给用户,完成整个支付流程 注:此图中,选择支付方式在商户站点实现(直连银行) 用户选择支付方式的步骤也可以在支付平台实现 有担保功能的支付平台的支付流程为: ![image007.png][] (1)买家将实体资金转移到买家的支付平台账户中 (2)买家购买商户的商品(或服务) (3)买家发出支付授权,支付平台将买家账户中相应的资金转移到支付平台自己的账户中保管 (4)支付平台通知商户已经收到货款,可以发货 (5)商户完成发货(或完成服务) (6)买家收到货物后,确认可以付款 (7)支付平台将临时保管的资金划拨到商户的支付平台账户中 (8)商户在需要时将商户的支付平台账户中的款项进行提现(兑换成实体的银行存款) ![image008.png][] ** ** ## 1.4 支付状态不同步的处理 ## 银行支付状态与支付平台及商户站点支付状态不同步时的处理,描述如下: Ø 银行支付状态一定正确,通过Job同步到支付平台,保证支付平台支付状态也正确 Ø 支付平台状态正确后,通过再次发送支付结果到商户站点,商户站点进行支付状态的同步 Ø 商户站点必须能够处理同一支付结果的多次通知的情况 银行支付状态与支付平台状态同步,如下图所示: ![image009.png][] 支付平台状态与商户站点状态同步,如下图所示: ![image010.png][] \-------------------------------------------by wsq-------------------------------- 支付过程是一个比较复杂的过程,可以使用多种设计模式。 使用时根据具体情况具体分析,也要结合自身架构特点进行设计和使用,不能为了模式而模式,应该是一个自然而然的过程。 具体说明: 大部分支付(支付宝、财付通)等都使用合作者id和密钥串,并且常用参数是订单号,金额,回调url等,可以统一抽象成支付父类,并设计一个支付接口,所有支付类型都要实现这个支付接口,这样新添加的支付类型只要多一个实现就行了,反射和调用推荐使用策略模式。有的时候比如银联的支付是需要一个密钥文件的,这种特殊情况可以考虑再加一个适配器模式来匹配已经设计的支付接口 电商网站设置支付方式的装载,可以用职责连模式 上面的大拿都已经说得很全了,感觉还是策略模式是根本,其他的可以有,也可以没有。 [image001.png]: http://www.yifupaizi.com/pay/image001.png [image002.png]: http://www.yifupaizi.com/pay/image002.png [image003.jpg]: http://www.yifupaizi.com/pay/image003.jpg [image004.png]: http://www.yifupaizi.com/pay/image004.png [image005.png]: http://www.yifupaizi.com/pay/image005.png [image006.png]: http://www.yifupaizi.com/pay/image006.png [image007.png]: http://www.yifupaizi.com/pay/image007.png [image008.png]: http://www.yifupaizi.com/pay/image008.png [image009.png]: http://www.yifupaizi.com/pay/image009.png [image010.png]: http://www.yifupaizi.com/pay/image010.png
还没有评论,来说两句吧...