关于交易系统的订单状态

「已注销」 2018-11-13 09:51:46
我们平台在客户交易后产生了订单(此时状态为:未支付),因为平台需要接入第三方支付公司,我们并不知道客户是否已经支付(第三方支付公司没有异步回调),所以需要不断地去轮询,主动去获取订单状态,但这个会有一个时效性问题,不能及时得到上游的状态,导致客户需要等很久。

能不能实现每个订单独立去查询,让客户能够及时了解订单状态是否已经支付?
...全文
469 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sk815 2018-11-20
  • 打赏
  • 举报
回复
没有异步通知就开查询接口···直接查第三方 然后反写自己的订单状态···如果没查询 就换第三方····
何必要如此 2018-11-20
  • 打赏
  • 举报
回复
换个第三方不行吗?
「已注销」 2018-11-20
  • 打赏
  • 举报
回复
现在的做法是下单后就把订单丢线程池里轮询(每订单一个线程,超时2分钟),查询上游订单如果成功则停止(估计会被上游骂【手动扶脸】),这样就能在用户付款后及时的得到上游订单结果。 各位还有其它解决方案吗?
jiaoxinxin 2018-11-19
  • 打赏
  • 举报
回复
你的这个第三方支付接口,没有异步回调?那就换个好点的第三方,这不是你轮询请求他,而是他轮询请求你的接口,告诉你支付成功了,你在这个接口里面返回一个值(比如返回“success”字符串),他就不在调你的接口,详情可以看支付宝文档,就是这样做的,注意数据的加解密就行。
  • 打赏
  • 举报
回复
我觉得这种情况下,除非你能让第三方提供及时响应或者异步回调。 如果不能,你怎么想其他方式都没啥用,毕竟用户等在哪里,人一多,都堆积了 或者换个方式思考,我能否先给个折中的状态,比如已提交支付申请。 给用户呈现这个信息,另外你们做好统计,大概需要多长时间支付才能成功。把时间信息也告知用户,请耐心等待。 毕竟你没法换接口,如果可以的话,走支付宝 or 微信支付,速度快。
_jant 2018-11-14
  • 打赏
  • 举报
回复
首先捞出未支付的订单, 拿到订单号去 队列里面排队, 如果有重复订单号,就舍弃 或者限流, 队列只处理订单号,不做查询。 队列出来的即是有效订单号,然后根据订单号去并发获取订单状态, 这里看能否支持批量单号查询?。 然后查询后 成功的就更新本地订单库状态,失败的继续进入队列排队。 队列并发一下。 你这个场景就可以支持
  • 打赏
  • 举报
回复
引用 4 楼 Eddie_Lau 的回复:
[quote=引用 3 楼 zyz1985 的回复:]
现行:
1.用户查询本地系统订单状态
2.后台定时任务轮询所有未支付订单,将已经支付订单状态设置为已支付
可变更为
1.用户查询本地系统订单状态,对于处于未支付状态订单额外同时发起第三方接口查询,如果为已支付,更新本地系统订单状态
2.后台定时任务轮询所有未支付订单,将已经支付订单状态设置为已支付


如果后台积累了很多未支付的订单(假如半小时内有1000条),那么我每秒轮询不可能把1000条订单状态处理完呀?[/quote]
用mq每秒向队列里放所有未支付的订单,如果队列里有相同的订单就不放相同的订单
「已注销」 2018-11-13
  • 打赏
  • 举报
回复
引用 3 楼 zyz1985 的回复:
现行: 1.用户查询本地系统订单状态 2.后台定时任务轮询所有未支付订单,将已经支付订单状态设置为已支付 可变更为 1.用户查询本地系统订单状态,对于处于未支付状态订单额外同时发起第三方接口查询,如果为已支付,更新本地系统订单状态 2.后台定时任务轮询所有未支付订单,将已经支付订单状态设置为已支付
如果后台积累了很多未支付的订单(假如半小时内有1000条),那么我每秒轮询不可能把1000条订单状态处理完呀?
游一游走一走 2018-11-13
  • 打赏
  • 举报
回复
现行: 1.用户查询本地系统订单状态 2.后台定时任务轮询所有未支付订单,将已经支付订单状态设置为已支付 可变更为 1.用户查询本地系统订单状态,对于处于未支付状态订单额外同时发起第三方接口查询,如果为已支付,更新本地系统订单状态 2.后台定时任务轮询所有未支付订单,将已经支付订单状态设置为已支付
「已注销」 2018-11-13
  • 打赏
  • 举报
回复
引用 1 楼 maradona1984 的回复:
利用mq的延迟队列可以做 还有客户主动触发查询订单状态的接口就行了
延迟队列可以做到每秒触发吗?我需要让每一笔订单不断地发起查询, 直到超时或成功就不再查询了。队列如果是排队的话,那后面进来的订单是不是就不能并行去查询了?
maradona1984 2018-11-13
  • 打赏
  • 举报
回复
利用mq的延迟队列可以做
还有客户主动触发查询订单状态的接口就行了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧