关于交易系统的订单状态

平台在客户交易后产生了订单(此时状态为:未支付),因为平台需要接入第三方支付公司,我们并不知道客户是否已经支付(因为第三方支付公司没有异步回调),所以需要不断地去轮询,但这个会有一个时效性问题,不能及时得到上游的状态。

能不能实现每个订单独立去查询,让客户能够及时了解订单状态是否已经支付?有什么方案吗?

阅读 6.6k
5 个回答

如果我没记错,支付宝自己本身也是用轮询去查询支付结果的

你们可以针对不同时间的订单来确定不同的轮询策略,比如订单5min中内的2min回调一次,10min中内的1min轮询一次。

一、我觉得可以去看看第三方支付的文档,一般来说支付都会有两个回调,第一个是同步回调,第二个是异步回调,我不知道你的第三方是那个,如果没有的话,这个是第三方支付软件设计的缺陷,需要他们去完善,ps:没有异步回调,我都不知道他们是怎么骗过自己的,然后让软件上线,这个缺陷太大了。
二、很显然,轮询的策略是不对的,因为用户支付是实时支付,除非你和第三方建立了一个socket的长链接,实时接收数据,否则订单状态就不能用轮询的方法。
三、如果你能确定你的这个订单号和对方的订单号一致,那么可以在确定前查询对方这个用户的支付状态来确定,这个一般的第三方支付公司都有这个接口的,但是一个连异步回调都没有的第三方支付,这个接口是否有我这也是存疑的

你确定没有异步回调?如果真木有,也没关系,有2个思路解决:
1.用户支付的时候弹出新页面,当前页面轮询后端,后端查询此订单的状态
2.后台遍历所有未支付订单轮询

订单是有超时时间的, 比如5分钟未支付 订单超时, 你可以 1分钟轮询检测一次.

我感觉也可以在数据库中写一个 job 来检测

使用 redis 或者 mongodb 来缓存下创建的订单, 然后进行轮询检测

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题