其实题目有点大,主要讨论的是手机客户端怎么接入支付宝的快捷支付呢。
支付宝的快捷支付的相关文档可以看这个帖子:支付宝接口资料下载(2012.11.23更新)
三方主要是客户端,业务服务端,支付宝服务端的交互。
1 客户端向业务服务端提交订单,业务服务方生成一个订单号
2 客户端根据订单号生成支付宝所需要的参数,向支付宝的支付接口提交
3 支付宝的支付接口返回同步数据。
4 支付宝服务端请求回调函数,这个回调函数是在业务服务方的,这个请求是异步的。
5 客户端根据用户订单号来去业务服务方确认是否已经支付成功。
这里有几个问题:
1 签名安全性
第二步,客户端根据订单号生成支付宝所需要的参数,这里的参数少不了签名,而支付宝的签名是使用rsa的,那么密钥就必须要放在客户端了。这个是有可能导致不安全的因素的。
所以这个签名过程最好是放在服务端。
即在第一步中不仅仅生成订单号,而且还生成其他各个参数,包括回调地址,签名等,这样做的好处是服务端统管参数了,以后回调地址一旦有变化,就可以在服务端做修改就好。
2 同步返回和异步返回看哪个
这个是最纠结的问题,但是总之,应该是看异步返回的,原因也是异步返回是服务端和服务端的交互,比客户端交互安全多了。
但是异步返回是可能会有问题风险的。因为异步,可能造成时间的延迟,就是说用户明明已经支付了,但是异步请求还没请求到。
这个情况在理论上是会存在的,但是实际上,我问过几个使用过支付宝开发的同事,这个情况很少,即使有这种情况,也只有记录下回调数据,然后给用户反馈,告知他的订单号,让他拿这个订单号再做查询。然后再做对账等操作了。