Midasbuy 小游戏登录 SDK 协议
概述
minigame-login SDK 是 MidasBuy 为小游戏开发者提供的登录认证解决方案,通过前端 SDK 封装,简化游戏接入流程,减少后台对接成本。
主要流程
SDK 接口规范
1. 初始化
1.1 引入 SDK
<script src="https://cdn.midasbuy.com/js/minigame-login.stable.js"></script>
建设中
1.2 初始化配置
MidasbuyLogin.init({
appId: '146000xxx', // MidasBuy分配的应用ID
environment: 'production', // 环境: 'production' | 'sandbox'
debug: false, // 是否开启调试模式
timeout: 30000 // 请求超时时间(毫秒)
});
参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
appId | String | 是 | MidasBuy分配的应用ID |
environment | String | 否 | 环境配置,默认'production' |
debug | Boolean | 否 | 调试模式,默认false |
timeout | Number | 否 | 超时时间,默认30000ms |
2. 登录接口
2.1 login 方法
MidasbuyLogin.login({
success: function(result) {
// 登录成功回调
console.log('登录成功:', result);
},
fail: function(error) {
// 登录失败回调
console.log('登录失败:', error);
}
});
参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 登录成功回调函数 |
fail | Function | 否 | 登录失败回调函数 |
成功回调参数:
{
code: 0,
message: 'success',
data: {
jwtToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
expiresIn: 3600,
refreshToken: 'rt_xxxxxxxxxxxxxxxx'
}
}
失败回调参数:
{
code: -1,
message: '错误描述',
error: 'ERROR_CODE'
}
2.2 Promise 方式调用
try {
const result = await MidasbuyLogin.login();
console.log('登录成功:', result);
} catch (error) {
console.log('登录失败:', error);
}
3. Token 管理
3.1 获取当前 Token
const currentToken = MidasbuyLogin.getToken();
console.log('当前JWT Token:', currentToken);
3.2 刷新 Token
MidasbuyLogin.refreshToken({
refreshToken: 'rt_xxxxxxxxxxxxxxxx',
success: function(result) {
console.log('Token刷新成功:', result);
},
fail: function(error) {
console.log('Token刷新失败:', error);
}
});
3.3 清除 Token
MidasbuyLogin.clearToken();
4. 用户信息
4.1 获取用户信息
const userInfo = MidasbuyLogin.getUserInfo();
console.log('用户信息:', userInfo);
4.2 检查登录状态
const isLoggedIn = MidasbuyLogin.isLoggedIn();
console.log('是否已登录:', isLoggedIn);
5. 事件监听
5.1 监听登录状态变化
MidasbuyLogin.on('loginStatusChanged', function(status) {
console.log('登录状态变化:', status);
// status: 'logged_in' | 'logged_out' | 'token_expired'
});
5.2 监听 Token 过期
MidasbuyLogin.on('tokenExpired', function() {
console.log('Token已过期,需要重新登录');
// 自动刷新或提示用户重新登录
});
5.3 移除事件监听
MidasbuyLogin.off('loginStatusChanged');
MidasbuyLogin.off('tokenExpired');
错误码规范
客户端错误码
错误码 | 错误信息 | 说明 |
---|---|---|
-1 | UNKNOWN_ERROR | 未知错误 |
-2 | INVALID_PARAMS | 参数错误 |
-3 | NETWORK_ERROR | 网络错误 |
-4 | TIMEOUT_ERROR | 请求超时 |
-5 | TOKEN_INVALID | Token无效 |
-6 | TOKEN_EXPIRED | Token已过期 |
-7 | GAME_SERVER_ERROR | 游戏服务器错误 |
-8 | USER_CANCELLED | 用户取消操作 |
服务端错误码
错误码 | 错误信息 | 说明 |
---|---|---|
1001 | INVALID_GAME_TOKEN | GameToken无效 |
1002 | GAME_TOKEN_EXPIRED | GameToken已过期 |
1003 | INVALID_OFFER_ID | 商品ID无效 |
1004 | INVALID_GAME_SERVER_URL | 游戏服务器地址无效 |
1005 | JWT_GENERATION_FAILED | JWT生成失败 |
1006 | RATE_LIMIT_EXCEEDED | 请求频率超限 |
安全特性
1. JWT Token 结构
// Header
{
"alg": "HS256",
"typ": "JWT"
}
// Payload
{
"openid": "test_id_1", // 用户OpenID
"user_name": "test_1", // 用户名
"avatar": "https://avatar.url", // 用户头像
"sub": "12345", // 用户ID
"iss": "midasbuy", // 签发者
"aud": "146000xxx", // 接收方(appId)
"exp": 1642150800, // 过期时间
"iat": 1642147200, // 签发时间
"jti": "unique-token-id", // Token唯一标识
}
2. 安全措施
- Token 有效期: JWT Token 有效期为1小时
- 刷新机制: 提供 RefreshToken 用于无感刷新
- 域名绑定: Token 与特定 appId 绑定
- 防重放: 每次请求包含 timestamp 和 nonce
- HTTPS 传输: 所有接口必须使用 HTTPS
注意事项
- HTTPS 必须: 生产环境必须使用 HTTPS
- Token 安全: 不要在客户端存储敏感信息
- 错误处理: 完善的错误处理和用户提示
- 性能优化: 合理使用缓存,避免频繁请求
- 兼容性: 支持主流浏览器和移动端