收藏
回答

关闭订单真的有作用吗?

根据关闭订单文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3

以下情况需要调用关单接口:商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。

注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。

其实这个设计挺好的。但是关闭订单接口有问题。

  1. 两次调用关闭订单,按文档说第二次会报错的,可是不会。https://developers.weixin.qq.com/community/develop/doc/0000c0ee7f81a0506edad096c56c00
  2. 甚至填任意无效的订单号“汪峰”都能返回成功,https://developers.weixin.qq.com/community/develop/doc/000c6ccf5d0b002b97da6e60456800

官方的这个回答,更无语。不建议使用同一个订单号。

https://developers.weixin.qq.com/community/develop/doc/000e66f7104a40ce447a8174856400


那么完全没有必要再关闭订单,直接换一个订单号就好了。但是这样会有一个问题:

我的应用场景是:家长给学生交餐费。一个孩子有多个家长。我们系统生成的订单号out_trade_number假如是1234

假如两个孩子家长同时缴费,在不同的地方不沟通。

爸爸先开订单,发现卡里没钱了,然后他开始换其他的卡。

同时妈妈在另一个地方,点击支付,发现报错201订单重复。我们提供了一个刷新订单状态按钮,点击后重新生成一个订单号5678。妈妈付款成功。

然后爸爸在换到第三张卡时终于成功了,订单号是1234。这样就造成了重复付款。

当然我可以在自己的业务逻辑里加更多的机制保证不会出现这个问题。

但是:这样一来还要关闭订单干嘛?发现201,直接重新生成订单号就好了。

期望官方按照文档把关闭订单接口做好,这个设计很好。谢谢。




回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容
问题标签