feat(wx-login): 添加微信登录接口租户支持
- 新增支持指定租户ID的微信登录相关接口 - 添加获取AccessToken和登录接口的重载版本 - 更新文档,增加租户支持相关说明 - 修改内部方法,支持指定租户ID参数
This commit is contained in:
119
docs/WX_LOGIN_TENANT_SUPPORT.md
Normal file
119
docs/WX_LOGIN_TENANT_SUPPORT.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# 微信登录接口租户支持文档
|
||||
|
||||
## 概述
|
||||
|
||||
为了支持多租户场景,我们为微信登录相关接口添加了支持指定租户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:增强错误处理和日志记录
|
||||
Reference in New Issue
Block a user