跑个题 , 乱扯两点.
1. 方案根治要还是靠 支付的 callback. 主动 query 的只是在 callback 的异常下补偿. 因为 callback 不完全可靠就放弃 callback, 这是因噎废食. callback+query 补偿. 才合理解决.
关于轮询的实现, 看你们自己的技术体系实现了(自己系分去)
2. 提醒一下, query 有两个常见的误区.
a. query 没找到单据, 当做"失败"处理. 其实不一定, 又可能下游处理慢未下单, 所以一般有个业务约定的超时时间, 只有超时时间真正超出了, 才是真的失败.
b. 如果允许一笔订单多次支付, 对多余的支付单要及时退款, 否则你又坑用户了; 实现层面, 比对一下之前支付单号.
以上两点, 支付类业务还好, 细节不当, 你坑了用户, 多付没退 ; 提现类业务, 可能多提钱出去了, 公司要亏.
--------------
这类场景 case 很典型很常见, mark 一下. 有空写点总结说说
---------------
ps. 专业做支付,来蚂蚁. 广告小尾巴, 谢谢
https://www.v2ex.com/t/541340