求助:扫码支付扣款成功,但系统订单状态未更新

❓ 问答悬赏 500 积分
余念••339 浏览•15 评论

问题描述

系统正常流程:

在系统中逐条录入订单,等待ID和地址匹配完成后勾选支付;所有订单录入完毕后,在支付页面勾选需要付款的订单,点击“电子付款”生成二维码,使用微信或支付宝扫码支付。二维码页面会持续刷新,直到提示付款成功。

当前出现的问题:

扫码支付时,手机上已经扣款成功,但二维码页面提示 “服务器连接超时,请检查网络连接” 。尝试断网重连没有效果,关闭支付页面重新打开后,原订单全部显示为 未支付状态。再次勾选订单点击“电子付款”,系统提示 “XXXX订单已支付,请退款后重试” 。

简单来说:钱扣了,但系统认为没付;想重新付,系统又说已经付过了;资金既没有退款,在系统中也没有实际匹配入账。

想请教的问题

  1. 这个情况是如何产生的
  2. 有没有什么解决办法
  3. 用户侧应该如何避免发生这种情况
  4. 服务侧应该怎么修复这一类的问题

回帖 15
💬 全部回帖 (15)
奶茶加辣(长大版)

很典型的单边账,虽然我没遇到过,可尝试给回调模块设置重试机制,增加超时容错

余念回复 @奶茶加辣(长大版)

然而我们级别太低没有办法升级或者修改系统的内容和权限。我感觉这是支付系统中非常常见的问题,居然无法解决,令人震惊。

海加尔金鹰

感觉是支付宝内部订单已经完成,但是第三方支付订单还没有同步到支付包订单状态的情况

余念回复 @海加尔金鹰

我感觉就是系统知道你付了一笔钱可能是这几个订单的,但是没匹配上,然后这个系统既没有返回支付失败退款,也没有后续重新匹配支付情况。目前这个问题仍未解决,不过更改支付方法之后,资金和订单莫名其妙匹配上了

。

小羊

我不会

奶茶加辣(长大版)回复 @小羊

菜!

小羊回复 @奶茶加辣(长大版)

吊毛加辣!!!!

小弘饱饱

感觉像是异步通知失败导致的状态不一致,支付掉单了

问一下ai呢,自从做数据以来就没接触过这些了😭,但是如果发生这种情况后期复核的时候会提出来给我们,我们会进行人工对账、冲销啥的,然后再反馈给系统方

余念回复 @小弘饱饱

唉,我们对系统没有权限,这个东西在异常订单和重复支付里面都没有,很神奇,最后是莫名其妙解决了

G

创单的时候传给支付宝的跟你们系统的订单号关联不上?

系统用唯一订单号查询支付宝 如果有支付成功的记录 就同步状态

余念回复 @G

我们是生成的电子支付码两个都能扫,系统唯一订单号我们看不到,具体问题也不知道怎么复现

G回复 @余念

生成二维码应该会返回支付宝订单号, 支付宝扫码会根据订单号拉起收银台 这个支付宝订单号就是唯一定位订单的 可以拿这个订单号到支付宝API查询订单状态 进行订单同步

余念回复 @G

😂 技术部啥也不会,一问三不知。只能希望以后不会出现这种问题

后台信息啥也看不到,连异常支付都查不出来

布拉布拉

支付架构上为了防止这个问题支付渠道商会提供两个方案来对账,

  1. 订阅通知
    支付渠道商是可以让你提供你的服务器的一个 notifications 的回调地址来下发支付事件给你的服务器的,这里可以用来做支付确认。
  2. 主动查询
    支付渠道商也通常提供有查询你的商户支付信息的api,可以直接查看对应的订单信息支付情况。

通常你的服务器为了cover支付信息就需要有这样的策略

  1. 前端 confim 回执
    前端支付完后主动请求你的服务器,你的服务器再查询订单支付情况返回给前端。这一步失败了可以根据你的业务情况来判断是直接重试还是开后台任务来重试。
  2. notifications 回调
    提供 notifications 回调地址给支付渠道商来接受支付事件,收到支付完成的事件就可以发放权益了,如果在 confim 期间收到,可以以 notifications 的事件为准结束后端的主动发起的支付确认请求。
  3. 服务启动时对账
    这个是处理在一些比较极端的情况,前端创建了订单并且支付了,这个时候你的服务器因为一些情况重启了(比如更新)导致 notifications 没有收到 confirm 接口也没办法调用,保证数据的准确性,可以重启的时候扫描数据库的订单然后给这些还没有完成的订单统一的主动请求支付渠道来对账。为什么需要这个?因为用户可能已经离开了当前的页面支付页面没办法重试 confirm,但用户已经支付了这是事实,后端还是要自己发放商品权益的。

你的情况应该是,confirm 步骤有问题,并且 notifications 也没做导致的,这个只能主动请求对账才能确认支付信息了。

余念回复 @布拉布拉

好像很符合你的描述,但是我们没办法进行手动请求,很脑残的系统😭

参与讨论

随机发现

随机发现尚未读取。