跳转到内容

36. Digital Wallet 数字钱包

你想做一个记账小工具,记录日常收支,看看钱花哪去了。

  • 模拟钱包的充值、消费、转账操作
  • 余额实时更新
  • 交易记录不丢失
用纯HTML+JS实现一个数字钱包:
功能:
1. 初始余额1000元
2. 充值:输入金额,余额增加,记录"充值 +500"
3. 消费:输入金额和备注,余额减少,记录"消费 -88 午餐"
4. 转账:输入对方名字和金额,余额减少,记录"转账 -200 给张三"
5. 余额不足时拒绝操作并提示
6. 交易记录列表:时间、类型、金额、备注
7. 简单统计:本月收入/支出/净额
8. 所有数据存localStorage
技术:纯HTML+CSS+JavaScript
单个index.html文件
  • 充值后余额正确增加
  • 消费后余额正确减少
  • 余额不足时操作被拒绝
  • 交易记录按时间排列
  • 月度统计数字正确
  • 刷新页面数据不丢失
  • 基本的账户余额模型 → Module: 业务建模
  • localStorage持久化 → Module: 浏览器存储
  • 输入验证(余额不足)→ Module: 数据校验

多个用户需要各自的钱包账户,能互相转账。

  • 用户注册登录+独立账户
  • 转账的事务保证(A减B加原子操作)
  • 交易流水不可篡改
用Go+Gin实现数字钱包后端:
用户系统:
1. 注册/登录(简单JWT认证)
2. 每个用户自动创建钱包账户(初始余额0)
账户模型(SQLite):
1. accounts(id, user_id, balance, created_at, updated_at)
2. transactions(id, from_account, to_account, amount, type, note, created_at)
- type: deposit(充值) / withdraw(提现) / transfer(转账) / payment(消费)
API:
1. POST /api/deposit — 充值(余额增加+记录流水)
2. POST /api/withdraw — 提现(检查余额+减少+记录流水)
3. POST /api/transfer — 转账(事务:A减B加+两条流水)
4. GET /api/balance — 查询余额
5. GET /api/transactions — 交易记录(分页)
转账事务(关键):
1. 开启数据库事务
2. SELECT balance FROM accounts WHERE id=A FOR UPDATE(锁定A)
3. 检查A余额>=转账金额
4. UPDATE A余额-金额
5. UPDATE B余额+金额
6. INSERT两条交易记录
7. COMMIT(任何一步失败则ROLLBACK)
前端:React页面,登录后显示余额、交易表单、交易记录
技术:Go+Gin, SQLite, JWT, React
  • 注册后自动创建钱包账户
  • 充值后余额正确增加
  • 转账事务原子性(中途失败全部回滚)
  • 余额不足转账被拒绝
  • 交易记录双方都能看到
  • 并发转账不会出现余额错误
  • 数据库事务与行锁 → Module: 数据库事务
  • 转账的原子性保证 → Module: ACID
  • 交易流水设计 → Module: 金融系统基础

钱包要能真充值真提现,接入银行卡和第三方支付。

  • 第三方支付集成(充值/提现)
  • 完整的交易流水和状态管理
  • 数据库升级到PostgreSQL
在V2基础上实现支付集成:
数据库升级:
1. 迁移到PostgreSQL
2. 新增表:
- payment_orders(id, user_id, channel, amount, status, external_id, created_at, updated_at)
- channel: alipay / wechat / bank_card
- status: pending / paid / failed / refunded
充值流程:
1. 用户选择充值渠道和金额
2. 创建payment_order(status=pending)
3. 调用支付渠道API创建支付(此处用模拟接口)
4. 支付回调通知 → 验证签名 → 更新order状态 → 增加余额
5. 异步轮询确认(防止回调丢失)
提现流程:
1. 用户申请提现 → 冻结对应金额
2. 后台审核(手动或自动)
3. 审核通过 → 调用银行接口打款
4. 打款成功 → 扣减冻结金额
5. 打款失败 → 解冻金额
交易流水:
1. 每笔操作生成唯一交易号
2. 流水表记录所有余额变动
3. 余额 = 所有流水金额之和(可校验)
4. 交易详情页展示完整状态流转
技术:Go+Gin, PostgreSQL, 模拟支付接口, React
  • 充值流程完整(创建→支付→回调→到账)
  • 支付回调验签正确
  • 提现冻结金额正确
  • 提现审核流程正常
  • 交易号全局唯一
  • 余额与流水之和一致
  • 回调丢失时轮询能补偿
  • 支付回调与签名验证 → Module: 支付系统
  • 冻结/解冻资金模型 → Module: 金融系统
  • 幂等性设计(重复回调)→ Module: 分布式系统
  • 补偿机制(轮询兜底)→ Module: 可靠性

用户量增加,需要防范盗刷、异常交易,保护用户资金安全。

  • 支付密码和二次验证
  • 交易限额管理
  • 异常交易检测
在V3基础上实现安全和风控:
支付安全:
1. 支付密码(独立于登录密码)
- 设置/修改支付密码
- 转账和提现需验证支付密码
- 连续错误5次锁定24小时
2. 大额交易二次确认(金额>5000弹窗确认)
3. 设备指纹:记录常用设备,新设备首次操作需额外验证
交易限额:
1. 单笔限额(默认5万,可调整)
2. 日累计限额(默认20万)
3. 月累计限额(默认100万)
4. 限额配置可按用户等级区分
5. 超限时拒绝交易并通知用户
异常检测:
1. 规则引擎检测异常:
- 大额交易(超过历史平均的10倍)
- 高频交易(1小时内超过20笔)
- 异地交易(IP地理位置突变)
- 深夜交易(凌晨2-5点)
2. 异常标记等级:low/medium/high
3. high级自动冻结账户,通知用户
4. 风控日志完整记录
技术:Go+Gin, PostgreSQL, Redis(限额计数器+设备指纹缓存)
  • 支付密码验证正确
  • 密码错误5次账户锁定
  • 限额检查准确(单笔/日/月)
  • 超限交易被拒绝
  • 异常交易被检测并标记
  • high级异常自动冻结账户
  • 风控日志可追溯
  • 支付安全设计 → Module: 安全架构
  • 限额与计数器(Redis)→ Module: 缓存应用
  • 规则引擎模式 → Module: 设计模式
  • 设备指纹 → Module: 安全防护

钱包功能丰富了,需要子账户管理(红包、优惠券),并保证资金准确。

  • 主账户+子账户体系
  • 冻结/解冻精细化
  • 完整对账系统
在V4基础上实现多账户和对账系统:
多账户体系:
1. 账户类型:
- main:主账户(充值/提现/转账)
- bonus:红包账户(收到的红包金额,有过期时间)
- coupon:优惠券账户(优惠券抵扣金额,有使用条件)
2. 消费扣款顺序:coupon → bonus → main
3. 退款反向:退回原账户
4. 子账户余额过期处理(定时任务清理)
冻结/解冻:
1. 每个账户独立冻结金额
2. 下单时冻结 → 支付成功扣减冻结 → 超时释放冻结
3. 冻结明细记录(冻结原因、关联订单)
4. 可用余额 = 余额 - 冻结金额
对账系统:
1. 内部对账:余额 vs 流水汇总,每日跑批
2. 外部对账:与支付渠道对账文件比对
3. 差异处理:
- 长款(我方多)→ 告警 + 人工处理
- 短款(我方少)→ 自动补偿 + 告警
4. 对账报告:成功率、差异笔数、差异金额
技术:Go, PostgreSQL, Redis, 定时任务
  • 多账户创建和查询正确
  • 消费扣款顺序正确(coupon→bonus→main)
  • 退款退回原账户
  • 冻结/解冻操作正确
  • 可用余额计算准确
  • 内部对账发现差异能告警
  • 外部对账文件比对正确
  • 过期子账户余额被清理
  • 多账户体系设计 → Module: 金融系统
  • 扣款优先级策略 → Module: 策略模式
  • 对账系统设计 → Module: 数据一致性
  • 定时任务与过期处理 → Module: 任务调度

钱包走向国际,需要支持多币种、汇率转换和反洗钱合规。

  • 多币种账户和实时汇率
  • 跨境转账流程
  • 反洗钱(AML)规则引擎
  • 审计追踪
在V5基础上实现跨境支付和合规系统:
多币种:
1. 每个用户可有多个币种账户(CNY/USD/EUR/JPY)
2. 实时汇率获取(外部API + Redis缓存,15分钟更新)
3. 币种转换:用户A(CNY) → 系统换汇 → 用户B(USD)
4. 汇率锁定:下单时锁定汇率,30分钟有效
5. 汇兑损益记录
跨境转账:
1. 发起方扣款(本币)
2. 中间账户持有资金
3. 换汇(按锁定汇率)
4. 收款方入账(目标币种)
5. 完整状态流转和异常处理
反洗钱(AML):
1. KYC等级:L0(未认证)/L1(实名)/L2(高级认证)
2. 不同等级交易限额不同
3. AML规则:
- 大额交易报告(单笔>5万CNY)
- 可疑交易检测(分散转入集中转出/循环转账)
- 制裁名单筛查(黑名单匹配)
4. 可疑交易自动冻结+上报
审计追踪:
1. 所有操作不可变审计日志(append-only)
2. 操作人、时间、IP、操作内容、前后状态
3. 审计日志独立存储,不可删除
4. 合规报告自动生成(月度/季度)
技术:Go微服务, PostgreSQL(分库), Redis, 消息队列, 审计日志
  • 多币种账户正确创建
  • 汇率获取和缓存正常
  • 汇率锁定30分钟内有效
  • 跨境转账全流程正确
  • KYC等级限额生效
  • 大额交易自动报告
  • 可疑交易被检测并冻结
  • 审计日志不可篡改
  • 合规报告正确生成
  • 多币种与汇率模型 → Module: 金融系统
  • 跨境支付流程 → Module: 支付架构
  • AML反洗钱规则 → Module: 合规系统
  • 不可变审计日志 → Module: 安全审计