所有代码修改已完成!以下是修改的文件:
- ✅
prisma/schema.prisma- 添加了piUid字段
- ✅
app/merchant-code/page.tsx- 传递 uid 到后端
- ✅
app/api/v1/auth/pi-login/route.ts- 接收并保存 uid - ✅
app/api/v1/payments/complete/route.ts- 使用 piUid 进行 A2U 支付,添加任务持久化
# 在项目根目录执行
npx prisma migrate dev --name add_pi_uid当提示确认时,输入 y 并回车。
如果数据库中已有用户数据,迁移可能会失败(因为 piUid 是 unique 但现有数据都是 null)。
解决方案:
# 1. 先手动将 piUid 设置为可选且非 unique 的字段(已经是这样)
# 2. 运行迁移
npx prisma migrate dev --name add_pi_uid
# 3. 如果迁移成功,所有现有用户需要重新登录以获取 piUidnpx prisma studio在 Prisma Studio 中检查 PiUser 表是否有 piUid 列。
# 停止当前服务器(Ctrl+C)
# 重新启动
npm run dev- 在 Pi Browser 中打开应用
- 退出登录(如果已登录)
- 重新登录
- 在 Prisma Studio 中查看用户记录,确认
piUid有值
- 确保所有测试收款人都已登录过(有 piUid)
- 在
/oneton页面发起测试转账 - 检查控制台日志,确认使用了正确的 piUid
- 所有现有用户的
piUid初始值为null - 他们需要重新登录一次,系统才能获取并保存他们的
piUid - 在
piUid为null的情况下,他们不能作为批量转账的收款人
如果批量转账时收款人没有 piUid,会显示错误:
User has no Pi uid: [地址]
此时需要通知该用户重新登录。
完成迁移后,请验证:
- 数据库迁移成功,
PiUser表有piUid列 - Prisma Client 已重新生成
- 开发服务器已重启
- 新用户登录后
piUid有值 - 老用户重新登录后
piUid更新 - 批量转账使用正确的
piUid(检查日志) - A2U 支付能够成功创建
原因: TypeScript 服务器缓存
解决:
- 在 VS Code 中按
Cmd+Shift+P(Mac) 或Ctrl+Shift+P(Windows) - 输入 "TypeScript: Restart TS Server"
- 回车
原因: 数据库中已有重复的 null 值
解决:
-- 这不是问题,因为 piUid 允许 null
-- 如果真的有问题,手动检查数据库原因: 前端没有传递 uid
解决:
- 检查浏览器控制台,确认
localStorage.getItem("pi_uid")有值 - 检查网络请求,确认登录请求的 body 包含
uid字段 - 检查后端日志,确认接收到 uid
如果遇到问题:
- 检查控制台日志
- 使用 Prisma Studio 检查数据库
- 查看网络请求确认数据传递
- 参考上面的故障排查章节
修改完成时间: 2025-10-21
修改文件数: 4 个
关键代码行数: ~35 行
状态: ✅ 代码已修改,等待数据库迁移