支付宝支付流程

支付宝支付流程_第1张图片

这里是引用支付宝支付流程时序图

第1步:用户在我们客户端里选择好订单信息后(比如要充值11块钱),然后选择支付宝支付;
第2步:我们客户端会走个接口告诉服务端用户是选择了哪个订单信息,服务端收到请求后,就会使用商户端私钥对这个订单信息进行加密生成数字签名,然后把这个数字签名拼接在明文订单信息后,形成一个加签订单信息orderString;
第3步:服务端通过第2步那个接口把orderString返回给客户端;

第4步、第5步:客户端使用这个orderString调用一下支付宝SDK的提供的支付API发起支付就可以调起支付宝客户端来支付了,与此同时当然支付宝服务端也收到了这个支付请求;
第6步:支付宝服务端收到这个orderString后就会使用我们填写在支付宝开放平台的那个商户端公钥对这个加签订单信息进行验签,并处理交易来完成支付,然后就会得到一个交易结果(交易成功啊、失败啊、中途取消啊等等),支付宝服务端又会使用支付宝私钥对这个交易结果进行加签;(支付宝服务端的加签、验签操作和我们服务端做的加签、验签操作是类似的)

第7、8、9、10步: (实际开发中会忽略掉9、10步,这里只是说明它们在干什么)支付宝服务端会把这个加签后的交易结果同步的返回给我们客户端,然后我们客户端需要把这个加签交易结果返回给服务端去验签(注意千万不能在客户端验签,倒不是说不能在客户端验签,主要的意思是说不要把支付宝公钥存在客户端),服务端验签结束后把真正的支付结果返回给我们客户端,客户端根据这个支付结果作出相应的界面处理。但是,支付宝开放平台说了:
①、强烈建议我们开发者直接依赖支付宝服务端返回给我们服务端的异步支付结果(即第12步),而忽略同步支付结果,因为这个同步支付结果有可能收不到啊,比如我们App在调用支付宝支付的过程中突然闪退了,那这个同步支付结果我们App是收不到的,自然也就无法传给服务端去验签,那不就麻烦了嘛,但是异步支付结果支付宝服务端是肯定能确保返回给我们的服务端的;
②、但是同步的支付结果和异步的支付结果都可以作为支付完成的凭证,所以为了简化集成流程,我们客户端就可以直接将同步支付结果作为支付结束的一个凭证,在忽略掉第7、8、9、10步的基础上,直接根据同步支付结果的状态码来作出相应的界面处理,甚至都不去关心支付结果的具体信息,而真正改变用户金钱字段的业务操作则由服务端根据异步的支付信息经过验签后去做改变,当然如果服务端验签失败了就说明支付结果被篡改了,是要报警的^_。

第11步:客户端直接将同步支付结果作为支付结束的一个凭证,根据状态码来作出相应的界面处理;

第12步、第13步:在第6步结束后,支付宝服务端会异步的把加签支付结果返回给我们服务端,服务端用支付宝公钥对这个支付结果进行验签,验签后根据支付结果作出实际的业务处理(如支付成功则给用户的金钱字段加上11,如果失败则不做处理等等);第13步是服务端会把实际的业务处理完毕后还需要在他们服务端SDK的回调里把业务的处理结果返回给支付宝服务端(如实际业务处理成功就返回给支付宝服务端success就算结束本次交易,如实际业务处理失败就返回给支付宝服务端fail,支付宝服务端就去再次调用服务端SDK来重新处理实际的业务逻辑直到成功,如果超过了一定的次数,服务端还是给支付宝服务端返回fail,说明是我们的系统出了问题,支付宝服务端就不会再触发服务端SDK来重新处理实际的业务了,这种情况下咱们的客户就会打我们的客服了,说我的支付宝都扣钱了,但为什么没充值成功呢,我们就人工的给人家处理一下)。

你可能感兴趣的:(随手记)