一、支付概念

现在有的支付机构:
支付宝、微信支付、京东支付、银联支付、小米支付、百度钱包、平安支付。
整个支付体系的流程都是大同小异的。
聚合支付平台。

二、支付架构整个流程

支付包整个支付流程:
	1、 网站提交参数到支付宝接口
	2、在支付宝接口中,支付结果会通知给蚂蚁课堂。

在支付这个开发中会遇到很多问题:
	1、安全方面:
				加密方式:
				使用https
				加签:防止数据被篡改
				加密手段:使用md5、base64、des、sha1
			   对称加密:base64、des、
			   非对称加密:rsa:公钥和私钥的互换
			   支付宝使用加签+非对称加密rsa
			   
	2、支付回调的时候幂等问题
				怎么保证接口的幂等性问题。
	
	支付宝怎么把支付结果通知给网站?
	1、支付通知结果有两种一种是同步通知(同步回调)、一种是异步通知。
	同步通知主要是展示给用户看的支付宝的支付结果。不会去处理订单的状态的更改。
		支付宝同步通知主要是展示作用的。本地浏览器做重定向的操作。
	异步通知主要是:主要是支付宝服务器使用httpclient技术调用网站的接口进行通知。会有补偿机制。

需要解决的问题:在网络延迟的情况下,如何解决支付回调幂等性的问题?
答:使用全局ID.

支付包app设计架构 支付平台架构 pdf_支付包app设计架构


双重通知+补偿机制。这上面是最简单版本的分布式事务解决方案。解决双方事务 一致性的问题。

在http协议通讯的时候怎么解决分布式事务问题?
答:如支付宝的支付流程,通过异步通知+补偿机制+自动重试机制来解决分布式事务的问题。

三、支付宝沙箱环境

沙箱环境地址https://openhome.alipay.com

1、要在沙箱环境中配置自己的私钥和公钥,私钥就自己记下来就行
2、下载沙箱环境的运行demo

支付包app设计架构 支付平台架构 pdf_异步通知_02

四、安全加密方式

1、安全加密分为
	单向加密:不可逆的加密,MD5、
	对称加密:base64 、des
		对称加密是可逆的,既可以加密出来,又可以拿到密文后解密出来
	非对称加密:	在支付系统中用的很多。
		RSA公钥和私钥(最安全的加密方式)需要做公钥和私钥的互换。
		
	支付宝:
		网站首先生成一对公钥和私钥,网站使用私钥进行加密,如果要进行解密需要拿到公钥来进行解密。
		相当于:网站本地生成一对密钥对,自己拥有私钥,把公钥给支付宝。支付宝拿公钥进行解密。

代码:

支付包app设计架构 支付平台架构 pdf_异步通知_03

如果使用了私钥进行加密了,就要用公钥进行解密
如果使用公钥进行加密了,就要使用私钥进行解密。

五、支付宝Demo环境的运行

支付包app设计架构 支付平台架构 pdf_支付包app设计架构_04

支付包app设计架构 支付平台架构 pdf_支付宝_05

六、支付宝流程源码分析

支付包app设计架构 支付平台架构 pdf_支付包app设计架构_06


里面的return_url:是在同步接口中的回调地址

notiify_url是在异步接口中,回调的地址。


封装成了一个POST提交的代码  

把参数封装成表单的方式,然后再后台以POST方式进行提交给支付宝服务器。
<form name="punchout_form" method="post" action="https://openapi.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=msqdFnggfRIH9eZf56MzSJvY%2BXVFF5b61rH17TmRZb80RLfQoiRt3INFZnpwEiE2IPJlz9DbWbkKNk8XrAPzu%2FACpjdDGLVKxqgY6gqOpFl2xSqnY2EI0tXKMizoM5kONoIEabdrqMXyh12aPnWrUM4PRgqMz1jrywuJwlzVQ%2F9takpzT1V70cdrNLqBDzs2tjz4BBygGg1yxYOtSWmdSngtTzwWJAo8O0mdUguOep6Yxsq2I%2B2DPhJEoRNPHc00kNzaUgxCuYKYXmuf6BSsadBaAz5%2FhErsw1M43tgCKgZiMYimSer1NUogO0ys%2FD3SnOsiqZrbxcKTTCQj4G9A2Q%3D%3D&return_url=http%3A%2F%2Fkgqfxi.natappfree.cc%2Freturn_url.jsp¬ify_url=http%3A%2F%2Fkgqfxi.natappfree.cc%2Fnotify_url.jsp&version=1.0&app_id=2016092300575828&sign_type=RSA2×tamp=2019-01-22+15%3A15%3A09&alipay_sdk=alipay-sdk-java-dynamicVersionNo&format=json">
<input type="hidden" name="biz_content" value="{"out_trade_no":"201912215649914","total_amount":"0.01","subject":"测试","body":"","product_code":"FAST_INSTANT_TRADE_PAY"}">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

支付包app设计架构 支付平台架构 pdf_非对称加密_07


支付过后,会产生异步通知和同步通知,再进行验签后如过成功了就会返回。

没有成功会有重试机制。