1、用户请求支付调用我方接口,我方根据订单信息和商品信息构造符合支付宝订单在哪里看要求的请求参数(请求参数中具有一个我方的回调地址当支付成功的时候,支付宝订单在哪里看会回调这个接口)去请求一个支付二维码(可设置支付二维码的过期时间)我方将支付二维码持久化到图片服务器,然后图片地址给前端让前端展示给用户。
2、剩下这一步就是用户和支付宝订单在哪里看的交互了用户支付成功后,支付宝订单在哪里看回调我们的接口我们的接口开始去更新订单状态,写支付信息到我们的数据库中如此一个完整的支付场景就完成了。支付宝订單在哪里看会根据我们返回的值判断这次交易是否成功,不成功则不扣钱
1、如何确保是支付宝订单在哪里看回调的我们的接口?
如果昰被恶意的第三方调用我们的接口并且通过了将订单状态更新了,那么就相当于我们形成了损失
支付宝订单在哪里看自身提供了一套校验机制(这套校验机制是怎么做的,值得学习)我们可以通过调用支付宝订单在哪里看的校验接口去校验回调是否来自支付宝订单在哪里看。
如果是因为网络原因、用户多次点击那么要保证这些操作造成的结果是一致的。
我的处理方案:先去数据库中查询状态如果狀态是订单已支付,那么返回支付已完成的消息否则去更新订单信息。
缺点:如果正在更新状态一个请求又过来了,那么还是不能保證幂等性
改进:使用一个全局分布式锁,每次要进行这个操作(其中还是有查询状态这个操作)去持有这个分布式锁,执行成功之后詓释放这个分布式锁(这是为了避免高并发带来的问题)