fix version 1
This commit is contained in:
@@ -345,3 +345,30 @@ flowchart TD
|
||||
11. **测试**:至少为 `TradeConsum`(并发扣减)、`ApplyCash`(重复提交)、`Callback`(金额不符/重复回调)、`FindWalletRecords`(过滤与分页)各写一条正例 + 一条边界用例;用 `go test -race` 覆盖渠道 client 的并发使用。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项。为 wallet 引入"统一支付网关抽象""回调事件总线""资金账户 DDD 分层"一类改造不在建议范围内——上述 11 条都是对现有函数的最小修正。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| W1 | 高 | `Payment.Callback` 凭用户 JWT 即可把支付单置为成功(无验签/无金额核对/无幂等) | 已修复:回调改为渠道验签/解密后再取状态,并与本地支付单金额核对;增加幂等判断,重复回调不重复入账 |
|
||||
| W2 | 高 | 支付回调匿名清单与 JWT 实现矛盾,真实渠道回调不可用 | 已修复:回调鉴权口径与实现对齐,渠道回调路径可用 |
|
||||
| W3 | 高 | 充值入账链路断裂(`ChargeWallet` 无调用点,回调不增加余额) | 已修复:回调成功后调用入账,余额与交易流水同步写入 |
|
||||
| W4 | 高 | 钱包余额扣减读后写、无事务/条件更新(并发双花) | 已修复:改为条件更新 `WHERE balance >= ?` 并检查 `RowsAffected`,扣减失败即返回余额不足 |
|
||||
| W5 | 高 | 提现只校验不扣减、无幂等键 | 已修复:申请提现时在事务内真实扣减余额并写流水,加幂等防护防重复提交 |
|
||||
| W6 | 高 | 支付密码可被任意 JWT 直接覆盖;密码仅单轮 HMAC-SHA256 | 已修复:支付密码存储改为 bcrypt(`DefaultCost`)并加 6~32 位纯数字格式校验;**已设置后不再允许任意登录态直接覆盖**(现契约无「旧密码」字段,已存在 bcrypt 密码时返回 `ErrPermissionDenied`,需走安全重置流程)。完整「校验旧密码后改密」**需要新增 proto 字段,属契约外,未做** |
|
||||
| W7 | 高 | 支付宝分支 `Body` 为 nil 导致 `PayChannel=2` 必然 panic | 已修复:修正请求体初始化 |
|
||||
| W8 | 高 | `ByOrder`/`ByCharge` 在 `wErr` 判空前解引用 `myWallet.Identity` | 已修复:先判错再使用,避免空指针 panic |
|
||||
| W9 | 高 | `JsapiPreOrder` 无鉴权且金额由请求方指定 | 已修复:补鉴权,金额改为服务端按本地支付单核对 |
|
||||
| W10 | 高 | 微信 APIv3 密钥、商户号明文硬编码入库 | 已修复:凭据改为从配置/环境变量读取,不再明文写库 |
|
||||
| W11 | 高 | 余额/提现/消费全链路不写 `wallet_record` 流水 | 已修复:充值、消费、提现均写入交易流水 |
|
||||
| W12 | 高 | 生产与测试配置字段名不匹配,服务无法启动 | 已修复:按 SDK 规范重写 `etc/wallet_prod.yaml`、`etc/wallet_test.yaml` |
|
||||
| W13 | 高 | `wallet_dev.yaml` 缺 `Wallet`/`Alipay` 段导致 nil 解引用 | 已修复:补齐配置段 |
|
||||
| W14 | 高 | `Databases` 未做非空校验,缺失即 panic | 已修复:`internal/config` 增加非空校验,缺失时给出明确中文提示 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
Reference in New Issue
Block a user