# 微信登录接口租户支持文档 ## 概述 为了支持多租户场景,我们为微信登录相关接口添加了支持指定租户ID的重载版本。这样可以在跨租户场景下灵活使用微信登录功能。 ## 新增接口 ### 1. 获取AccessToken(支持租户ID) **接口地址:** `POST /api/wx-login/getAccessToken/{tenantId}` **参数:** - `tenantId`:租户ID(路径参数) **示例:** ```bash curl -X POST "http://localhost:8080/api/wx-login/getAccessToken/123" ``` ### 2. 微信授权手机号码并登录(支持租户ID) **接口地址:** `POST /api/wx-login/loginByMpWxPhone/{tenantId}` **参数:** - `tenantId`:租户ID(路径参数) - 请求体:UserParam对象 **示例:** ```bash curl -X POST "http://localhost:8080/api/wx-login/loginByMpWxPhone/123" \ -H "Content-Type: application/json" \ -d '{ "code": "登录凭证code", "authCode": "手机号授权code", "openid": "微信openid(可选)" }' ``` ## 兼容性 ### 原有接口保持不变 所有原有的接口都保持不变,确保向后兼容: - `POST /api/wx-login/getAccessToken` - 使用当前租户ID - `POST /api/wx-login/loginByMpWxPhone` - 使用当前租户ID ### 内部方法重载 我们添加了以下内部方法的重载版本: 1. `getAccessToken(Integer tenantId)` - 支持指定租户ID获取AccessToken 2. `getPhoneByCode(UserParam userParam, Integer tenantId)` - 支持指定租户ID获取手机号 3. `addUserWithTenant(UserParam userParam, Integer tenantId)` - 支持指定租户ID注册用户 ## 使用场景 ### 场景1:管理员代理操作 管理员需要为特定租户的用户进行微信登录操作: ```javascript // 前端代码 wx.login({ success: (loginRes) => { wx.getPhoneNumber({ success: (phoneRes) => { wx.request({ url: '/api/wx-login/loginByMpWxPhone/123', // 指定租户ID method: 'POST', data: { code: loginRes.code, authCode: phoneRes.code } }); } }); } }); ``` ### 场景2:跨租户数据同步 在数据同步或迁移场景下,需要为不同租户获取AccessToken: ```java // 后端代码示例 String tenant1Token = getAccessToken(123); String tenant2Token = getAccessToken(456); ``` ## 注意事项 1. **租户ID验证**:系统会验证传入的租户ID是否有效 2. **权限控制**:确保调用者有权限操作指定租户的数据 3. **缓存隔离**:不同租户的AccessToken会分别缓存,互不影响 4. **错误处理**:如果指定的租户ID无效,会返回相应的错误信息 ## 错误码 | 错误码 | 说明 | |--------|------| | 40001 | 租户ID无效 | | 40002 | 无权限操作指定租户 | | 40029 | 微信授权码无效或过期 | ## 最佳实践 1. **前端处理**:建议前端分别获取登录code和手机号code,避免code重复使用 2. **错误重试**:当遇到40029错误时,提示用户重新授权 3. **日志记录**:系统会记录详细的操作日志,便于问题排查 4. **租户隔离**:确保不同租户的数据完全隔离 ## 更新日志 - 2024-12-19:添加租户支持功能 - 2024-12-19:修复openid获取失败的问题 - 2024-12-19:增强错误处理和日志记录