资讯动态

聊天显示“已送达”,钱到账了吗?IM 转账状态机避坑笔记

发布时间:2026/10/4 1:24:39 来源:尧图企业网站定制
对方在聊天里回了一句“转过去了”消息显示已送达。你去看余额没变。做过 IM 内转账的工程师多半处理过这种工单聊天里是一个状态账本里是另一个。这种错位可以叫它“幽灵状态”。核心结论IM 转账中消息的 DELIVERED 只代表内容送达设备转账是否完成以账本的 SETTLED 为准。两者应建成两套独立状态机通过 transfer_id 关联由账本事件驱动聊天卡片更新。MPChat 的转账入口在会话里资金动作由 MPChat Pay 处理。把消息的 DELIVERED 渲染成“对方已收款”就是拿通信层的信号回答资金层的问题。说明下文为通用架构模型用于技术讨论不代表 MPChat 现网接口、字段或内部实现。消息状态和转账状态有什么区别消息状态 CREATED → SENT → DELIVERED → READ 转账状态 CREATED → AUTH_PENDING → PROCESSING → SETTLED └──────→ FAILED消息状态机转账状态机回答的问题内容送到了没有钱记到账上了没有终态READSETTLED / FAILED依据消息服务账本对方在聊天里打出“我已转账”也只是一条消息。数据模型怎么拆表关键字段作用chat_messagemessage_id, conversation_id, msg_status, transfer_id可空记录消息投递transfertransfer_id, sender_account, recipient_account, amount, status记录转账进度ledger_entryentry_id, transfer_id, account_id, direction, amount记录借贷分录message_id 可以关联 transfer_id但不能代替它。聊天窗口负责展示账本是资金状态的 Source of Truth。为什么不能先推“成功”卡片再记账先推卡片、再异步写账本账本一旦写入失败或回滚收款方看到了成功提示交易记录里却没有这笔钱。约束很简单转账满足账本确认条件后才生成“已完成”事件聊天卡片只消费这个事件。结算和通知怎么分离function settleTransfer(transferId): begin transaction transfer lockTransfer(transferId) if transfer.status SETTLED: return assert transfer.status PROCESSING writeDebitEntry(transferId, transfer.senderAccount, transfer.amount) writeCreditEntry(transferId, transfer.recipientAccount, transfer.amount) updateTransferStatus(transferId, SETTLED) writeOutboxEvent(eventKey transfer.settled: transferId, transferId) commit function onTransferSettled(event): if alreadyConsumed(event.eventKey): return updateChatPaymentCard(event.transferId, displayStatus completed) markConsumed(event.eventKey)这里有两处幂等账本侧锁单后检查状态结算重试不会重复记账。聊天侧按 eventKey 去重事件重投不会生成两张“已完成”卡片。记账和写 Outbox 事件在同一事务里提交。通知失败只重试通知不重做资金转移。“对方说转了我没收到”怎么排查按 transfer_id 查三层指令层转账是否创建收款账户和金额是否正确。账本层是否到达最终状态借贷记录是否完整。展示层收款侧能否查到记录聊天卡片和交易详情是否一致。现象问题出在哪先查什么账已记完聊天仍显示“处理中”展示投影没跟上修展示投影聊天显示“已完成”账本缺记录状态发布早于记账发布顺序、事务边界、补偿任务状态不同步的单子别靠重新发起一笔转账来补。再发一笔账上多了一次真实转移原来那条记录还在。FAQ消息显示 DELIVERED能说明对方收到钱了吗不能。DELIVERED 只说明消息到达接收端设备资金状态要看转账记录是否为 SETTLED。聊天里的转账卡片该由谁来更新由结算完成后发出的事件驱动聊天卡片只负责展示。通知发送失败怎么办重试通知即可。已结算的转账不需要重新转一次。转账入口离对话越近越需要在系统里把消息证据和资金证据分开。用户在意的是这笔交易查得到、对得上聊天里看到的和账单写的是同一个结论。你们团队的支付卡片是订阅账本事件还是由业务服务直接推送评论区聊聊。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑