frontend-app-integration.md 4.7 KB

用户 App:注销冷静期与登录确认接入

更新:2026-11-05。仅普通用户账号适用,商家和骑手沿用原登录流程。

注销确认与申请

注销前的确认弹窗由前端控制,按钮为“确认注销”“取消注销”。用户取消时不调用注销接口。

确认注销调用 GET /infouser/user/deleuser,携带 token 请求头,无请求体。存在未完成订单等情况时沿用接口错误提示。

成功响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "cancellationDeadlineAt": "2026-11-12 15:00:00",
    "graceDays": 7
  }
}

graceDays 是本次申请的冷静期总天数,默认7;cancellationDeadlineAt 是准确截止时间,格式 yyyy-MM-dd HH:mm:ss,时区 UTC+8。注销成功后以接口实际返回值显示期限,并立即清除本地登录态、退出账号。

冷静期内尝试登录

手机号登录、Apple/Google/LINE 已绑定登录、验证手机号绑定和设备确认登录仍使用原请求参数。身份验证通过后,如果账号处于冷静期,返回:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "status": "cancellationConfirm",
    "remainingDays": 3,
    "cancellationDeadlineAt": "2026-11-08 15:00:00",
    "confirmationKey": "0123456789abcdef0123456789abcdef",
    "expiresInSeconds": 300
  }
}
字段 说明
status cancellationConfirm 表示等待用户确认恢复,尚未登录
remainingDays 剩余冷静期天数,由后端向上取整;不足24小时显示1天
cancellationDeadlineAt 本次注销的截止时间,UTC+8
confirmationKey 确认恢复所需的临时凭证,仅本次流程使用
expiresInSeconds 临时凭证剩余有效秒数,最长300秒;临近注销截止时可能更短

前端先判断 data.status。进入此分支时没有登录 token,不能仅凭 code=200 当作登录成功,也不能保存账号登录态。

弹窗文案:

该账号正在注销中,剩余X天。登录将撤销注销申请并恢复正常使用,是否继续?

X 直接使用 remainingDays,不要使用申请注销时的 graceDays,也不要按手机本地日期重算。

按钮行为:

  • 继续登录,恢复账号:调用下方确认接口,成功后进入原登录成功流程。
  • 继续注销,不登录:关闭弹窗,丢弃临时凭证,结束本次登录,不调用确认接口。关闭或返回退出弹窗同样不恢复账号。

确认恢复并登录

POST /infouser/user/confirmCancellationLogin

无需登录 token,请求头 Content-Type: application/json,请求体:

{
  "confirmationKey": "0123456789abcdef0123456789abcdef"
}

只提交上一步返回的确认凭证,不需要重发短信验证码或第三方授权 code,也不传用户ID、手机号或恢复标志。

成功响应保持原登录成功结构:

{
  "code": 200,
  "msg": "登录成功",
  "data": {
    "userId": 1001,
    "userType": "0",
    "delFlag": "0"
  },
  "token": "新的登录token"
}

示例只列出部分用户字段。成功后恢复原账号,保存新 token 并按现有流程初始化登录。注销前的旧 token 仍然无效。

按钮提交期间禁用重复点击。确认凭证只能使用一次;超时、账号不可恢复或凭证失效时展示接口 msg 并重新发起登录,不能反复提交旧凭证。网络超时导致结果不确定时也重新登录获取当前账号状态。

LINE 网页回调

通过 /auth/line/callback 回到 App 的登录方式,冷静期回跳参数为:

?cancellationConfirm=1
&confirmationKey=0123456789abcdef0123456789abcdef
&remainingDays=3
&cancellationDeadlineAt=2026-11-08%2015%3A00%3A00
&expiresInSeconds=300

上例换行仅为阅读,实际为同一个URL的查询参数。解析URL编码后显示同一确认弹窗;此分支没有 token,确认时调用同一个 confirmCancellationLogin 接口并处理JSON登录响应。

正常登录的 token 回跳、未绑定的 needPhone 和设备确认 deviceConfirm 保持原处理方式。

联调检查

  • 注销前取消不发请求;注销成功读取实际天数和截止时间并退出账号。
  • 所有用户登录方式遇到 cancellationConfirm 均先弹窗,不进入登录态。
  • 选择继续注销或关闭弹窗,账号仍处于注销状态;再次登录仍需身份验证。
  • 确认恢复成功后保持原userId,使用新token登录;重复点击、凭证超时及注销期已到均按错误提示处理。
  • 无冷静期的正常用户登录体验保持不变。

本次提供后端接口及接入约定,App弹窗和按钮由前端实现,文案按现有客户端国际化机制处理。