bindbox-mini/.trae/documents/基于 Swagger 的 App 用户 API 汇总与 Uni-App 微信登录页面实现方案.md
2025-11-24 22:37:11 +08:00

103 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## API 文档汇总App 用户相关)
* 登录与绑定:
* `POST /api/app/users/weixin/login`miniapp/src/api/apis/apiDefinitions.js:106
* 请求: `App_weixin_login_request`code、invite\_code可选
* 响应: `App_weixin_login_response`token、user\_id、avatar、nickname、invite\_codeminiapp/src/api/apis/globals.d.ts:760
* `POST /api/app/users/{user_id}/phone/bind`apiDefinitions.js:123
* 请求: `App_bind_phone_request`code来源于微信手机号授权globals.d.ts:376
* 响应: 成功布尔或标准成功结构(项目统一在 `responded` 钩子返回 `response.data``response.data.data`miniapp/src/api/apis/index.js:59
* 用户资料与地址:
* `PUT /api/app/users/{user_id}` 修改头像/昵称apiDefinitions.js:107
* 请求: `App_modify_user_request`avatar、nickname可选globals.d.ts:363
* `GET /api/app/users/{user_id}/addresses` 列表apiDefinitions.js:108/ `POST` 新增apiDefinitions.js:109/ `DELETE` 删除apiDefinitions.js:110/ `PUT .../default` 设默认apiDefinitions.js:114
* 新增请求: `App_add_address_request`姓名、手机号、省市区、详细地址、是否默认globals.d.ts:367
* 响应: 列表返回数组,新增/删除/设默认返回标准成功结构(项目统一 `responded` 处理)
* 积分与统计:
* `GET /api/app/users/{user_id}/points`apiDefinitions.js:124/ `GET .../points/balance`apiDefinitions.js:125
* 响应: `App_points_balance_response`balanceglobals.d.ts:773
* `GET /api/app/users/{user_id}/stats`apiDefinitions.js:126
* 响应: `App_user_stats_response`coupon\_count、item\_card\_count、points\_balanceglobals.d.ts:776
* 订单与卡券/道具:
* `GET /api/app/users/{user_id}/orders`apiDefinitions.js:122→ 订单列表(类型包含 `Model_order_items` 等)
* `GET /api/app/users/{user_id}/coupons`apiDefinitions.js:118/ `GET .../invites`apiDefinitions.js:119
* `GET /api/app/users/{user_id}/item_cards`apiDefinitions.js:120/ `GET .../item_cards/uses`apiDefinitions.js:121
* 响应: `User_item_card_with_template[]`globals.d.ts:978
## 现有代码要点(可复用)
* API 客户端:`alova` + 生成器miniapp/src/api/apis/index.js:35、112miniapp/alova.config.js:6已封装 `Authorization`、401 刷新登录index.js:9-33
* 登录页Taro版`miniapp/src/pages/login/index.vue`,逻辑封装在 `Apis.login.WechatAppLogin`index.js:122-421
## 登录页面实现Uni-App Vue3
* 页面结构Logo/说明文案、按钮`「微信登录」``open-type="getPhoneNumber"`的手机号授权按钮,加载与错误提示。
* 流程:
* `uni.login({ provider: 'weixin' })` 获取 `code` → 调用 `POST /api/app/users/weixin/login` → 存储 `token``user_id``uni.setStorageSync`
* 可选:用户点击手机号授权后触发 `onGetPhoneNumber`,拿到 `code` 调用 `POST /api/app/users/{user_id}/phone/bind` 绑定手机号。
* 登录完成后拉取 `GET /api/app/users/{user_id}/stats``.../points/balance` 更新首页状态。
* 网络层:
* 方案A推荐复用现有在 Uni-App 中引入与复用 `alova` 生成的 `Apis`(保持统一的拦截器与基址、响应处理)。
* 方案B轻量使用 `uni.request` 封装最小调用(登录/绑定/统计),按现有 `Authorization: Bearer <token>` 规则注入。
* 配置与安全:
* `baseURL` 指向后端地址(如 `http://127.0.0.1:9991`),并在微信小程序后台配置合法域名/证书;避免在日志中输出明文 token/手机号等敏感信息。
* 路由与状态:
*`pages.json` 新增 `pages/login/index`,登录成功后 `uni.reLaunch` 到首页;使用 `pinia` 存储 `isLogin``userInfo``points` 等(参考 miniapp/src/store/index.js
* 错误处理:
* 按当前项目的分类提示连接被拒绝、超时、域名未配置、SSL 错误、404、500、参数错误进行用户级文案与重试入口参考 index.js:221-253
## 验证与交付
* 验证:真机或开发者工具下,观察 `code` 获取、接口返回、`token/user_id` 存储与后续接口成功;埋点或日志控制台输出关键步骤。
* 交付:
* 新增 `pages/login/index.vue`Uni-App Vue3 Composition API 实现)。
* 复用或新增 API 封装A/B 二选一)。
* 配置/路由调整与最小 `pinia` 状态接入。
## 后续执行步骤
* 接入 Swagger 源:将生成器输入指向 `http://127.0.0.1:9991/swagger/v1/swagger.json`(或项目后端的 Swagger JSON生成/更新 `Apis` 并对齐 `baseURL`
* 按上述方案完成页面与调用接入,并保持与现有 `alova` 响应处理一致性。