# 微信登录接口租户支持文档

## 概述

为了支持多租户场景，我们为微信登录相关接口添加了支持指定租户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：增强错误处理和日志记录
