关于支付
现在的电商项目已经非常火爆了,随之而来的像支付宝,微信等第三方支付也非常的火爆,所以这里简单的说一下支付宝的支付流程。
支付步骤
工作前准备
首先我们需要在蚂蚁金服官网上面注册一个开发者账号,上面有关于开发者的文档和需要的SDK到这我们就可以做一些实质性的开发了。
- 创建应用并获取APPID
- 配置秘钥
这里会生成RSA秘钥,(就是一种非对称的加密)的加密方式
它的秘钥分成公钥和私钥两类一般是公钥加密私钥解密或者私钥加密公钥解密
生成秘钥后在开发者平台进行秘钥配置最后就可以得到支付宝的公钥了
支付宝的支付流程呢
其实如果我们只想简单集成一下支付宝的支付,只需要上面的几步再下载下来官网的Dome就差不多了,但是真正去面试的时候面试官更多的是关心支付宝的支付流程,所以这里简单多支付宝的支付流程说一下:
我们可以简单的看出整个支付宝的支付流程设计到五大块,分别是:用户、商户客户端、支付宝客户端SDK、支付宝服务端、商户服务端其实也就是说,整个支付流程就是这五大块之间的交互,具体的实现上图也给的很清晰了(图中虚线标识商户链路,实线标识支付宝链路),下面对图中重要的步骤简单的介绍:
- 添加购物车,生成待支付订单,产生唯一订单号
- 请求商户服务端(自己的后台),在后台对订单信息进行签名操作,这里应用为了安全考虑,会把似钥放在服务端,客户端只要报订单号传给服务端,具体签名在后台进行。
- 服务端把签名好的订单信息返回给客户端
- 调用支付接口,把签名好的订单信息,通过调用支付宝API,发送给支付宝客户端SDK
- 支付宝客户端发起向支付宝服务端发起支付请求
- 支付宝客户端输入支付密码。完成支付
- 返回同步结果给支付宝客户端
- 支付宝客户端将接口返回支付结果给我们的商户端口,9000支付成功
- 同时也将支付结果发送给了商户服务端。验签,解析支付结果。将客户端与服务端的支付信息进行比对,确保订单支付正确无误
- 确认订单无误之后,返回最终支付结果给商户端
- 客户端将订单支付完成信息在界面显示,告知用户支付完成
关于加密
我们都知道支付的整个流程都是通过加密完成的(RSA非对称加密)所以这里简单的对支付宝中用到的加密流程说一下:
在商户服端要完成的,商户客户端获取签名的过程
客户端准备好要传送的数字信息(订单信息)
客户端对数字信息进行哈希运算,得到一个信息摘要
客户端用自己的似钥(SK)对对信息摘要进行加密得到客户端的数字签名,并将其附在数字信息上(对数字签名进行BASE64编码,)
在支付宝客服端进行的操作
A. 客户端用服务端的公钥(PK)对刚才随机产生的加密密钥进行加密,将加密后的密文传送给服务端
B.服务端收到客户端传送过来的密文,用自己的私钥对密文进行解密
验签的过程服务端用客户端的公钥对客户端传过来的数字签名进行解密得到信息摘要
服务端用相同的hash算法对收到的明文再进行一次hash运算,得到一个新的信息摘要
服务端将收到的信息摘要和新产生的信息摘要进行比较如果相同,说明信息没有被修改过可以安全支付
RSA非对称加密
RSA非对称加密:RSA算法可以用于数据加密和数字签名,总原则就是:公钥和私钥一个用来加密一个用来解密
下面以甲方和乙方来举个加密过程的例子:
甲方:商户客户端,支付宝客户端
乙方:支付宝服务端,商户服务端
<h4> 支付加密的模型</h4>
- 甲方在本地构建秘钥对(公钥+私钥),并将公钥告诉乙方
- 甲方将数据用私钥进行加密,发送给乙方
- 乙方用甲方提供的公钥对数据进行解密
(当然这个整个传递过程是可以互换的,也可以由乙方传递给甲方)
END
到这里支付宝的整个支付流程和RSA加密就简单介绍完了,
这里贴一下自己写的一个调取支付宝支付的code,(注意每次支付成功就是支付一分钱,所以请别随意支付,代码可运行)
项目地址
https://github.com/Qiaoshi96/PayDemo.git
贴一下效果图