平台在客户交易后产生了订单(此时状态为:未支付),因为平台需要接入第三方支付公司,我们并不知道客户是否已经支付(因为第三方支付公司没有异步回调),所以需要不断地去轮询,但这个会有一个时效性问题,不能及时得到上游的状态。
能不能实现每个订单独立去查询,让客户能够及时了解订单状态是否已经支付?有什么方案吗?
平台在客户交易后产生了订单(此时状态为:未支付),因为平台需要接入第三方支付公司,我们并不知道客户是否已经支付(因为第三方支付公司没有异步回调),所以需要不断地去轮询,但这个会有一个时效性问题,不能及时得到上游的状态。
能不能实现每个订单独立去查询,让客户能够及时了解订单状态是否已经支付?有什么方案吗?
一、我觉得可以去看看第三方支付的文档,一般来说支付都会有两个回调,第一个是同步回调,第二个是异步回调,我不知道你的第三方是那个,如果没有的话,这个是第三方支付软件设计的缺陷,需要他们去完善,ps:没有异步回调,我都不知道他们是怎么骗过自己的,然后让软件上线,这个缺陷太大了。
二、很显然,轮询的策略是不对的,因为用户支付是实时支付,除非你和第三方建立了一个socket的长链接,实时接收数据,否则订单状态就不能用轮询的方法。
三、如果你能确定你的这个订单号和对方的订单号一致,那么可以在确定前查询对方这个用户的支付状态来确定,这个一般的第三方支付公司都有这个接口的,但是一个连异步回调都没有的第三方支付,这个接口是否有我这也是存疑的
订单是有超时时间的, 比如5分钟未支付 订单超时, 你可以 1分钟轮询检测一次.
我感觉也可以在数据库中写一个 job 来检测
使用 redis 或者 mongodb 来缓存下创建的订单, 然后进行轮询检测
4 回答1.4k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答741 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
如果我没记错,支付宝自己本身也是用轮询去查询支付结果的