# wafer-session-server
**Repository Path**: mirrors_tencentyun/wafer-session-server
## Basic Information
- **Project Name**: wafer-session-server
- **Description**: Wafer - 企业级微信小程序全栈方案
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-08-18
- **Last Updated**: 2025-08-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Wafer 会话服务器
===============
本项目是 [Wafer](https://github.com/tencentyun/wafer) 组成部分,提供会话服务供 SDK 或独立使用。
会话服务的实现细请参考 [Wiki](https://github.com/tencentyun/wafer/wiki/%E4%BC%9A%E8%AF%9D%E6%9C%8D%E5%8A%A1)。
## 接口协议
### 请求
会话服务器提供 HTTP 接口来实现会话管理,下面是协议说明。
* 协议类型:`HTTP`
* 传输方式:`POST`
* 编码类型:`UTF-8`
* 编码格式:`JSON`
请求示例:
```http
POST /mina_auth/ HTTP/1.1
Content-Type: application/json;charset=utf-8
{
"version": 1,
"componentName": "MA",
"interface": {
"interfaceName": "qcloud.cam.id_skey",
"para": { "code": "...", "encrypt_data": "..." }
}
}
```
### 响应
HTTP 输出为响应内容,下面是响应内容说明:
* 内容编码:`UTF-8`
* 内容格式:`JSON`
响应示例:
```json
{
"returnCode": 0,
"returnMessage": "OK",
"returnData": {
"id": "...",
"skey": "..."
}
}
```
* `returnCode` - 返回码,如果成功则取值为 `0`,如果失败则取值为具体错误码;
* `returnMessage` - 如果返回码非零,内容为出错信息;
* `returnData` - 返回的数据
### qcloud.cam.id_skey
`qcloud.cam.id_skey` 处理用户登录请求。
使用示例:
```sh
curl -i -d'{"version":1,"componentName":"MA","interface":{"interfaceName":"qcloud.cam.id_skey","para":{"code":"001EWYiD1CVtKg0jXGjD1e6WiD1EWYiC","encrypt_data":"DNlJKYA0mJ3+RDXD/syznaLVLlaF4drGzeZvJFmjnEKtOAi37kAzC/1tCBr7KqGX8EpiLuWl8qt/kcH9a4LxDC5LQvlRLJlDogTEIwtlT/2jBWBuWwBC3vWFhm7Uuq5AOLZV+xG9UmWPKECDZX9UZpWcPRGQpiY8OOUNBAywVniJv6rC2eADFimdRR2qPiebdC3cry7QAvgvttt1Wk56Nb/1TmIbtJRTay5wb+6AY1H7AT1xPoB6XAXW3RqODXtRR0hZT1s/o5y209Vcc6EBal5QdsbJroXa020ZSD62EnlrOwgYnXy5c8SO+bzNAfRw59SVbI4wUNYz6kJb4NDn+y9dlASRjlt8Rau4xTQS+fZSi8HHUwkwE6RRak3qo8YZ7FWWbN2uwUKgQNlc/MfAfLRcfQw4XUqIdn9lxtRblaY="}}}' http://127.0.0.1/mina_auth/
```
响应数据:
* `id` - 会话 id
* `skey` - 会话 skey
* `userInfo` - 用户信息
### qcloud.cam.auth
使用 `qcloud.cam.auth` 接口检查用户登录态。
响应数据:
* `true` - 登录态有效
* `false` - 登录态无效
### 错误码
错误码 |
解释 |
0 |
成功 |
1001 |
数据库错误 |
1002 |
接口不存在 |
1003 |
参数错误 |
1005 |
连接微信服务器失败 |
1006 |
新增或修改 SESSION 失败 |
1007 |
微信返回值错误 |
1008 |
更新最近访问时间失败 |
1009 |
请求包不是json |
1010 |
接口名称错误 |
1011 |
参数不存在 |
1012 |
不能获取 AppID |
1013 |
初始化 AppID 失败 |
40029 |
CODE 无效 |
60021 |
解密失败 |
60012 |
鉴权失败 |
## 数据库设计
全局信息表 `cAppInfo` 保存会话服务所需要的配置项。
Field |
Type |
Null |
key |
Extra |
appid |
varchar(200) |
NO |
PRI |
申请微信小程序开发者时,微信分配的 appId |
secret |
varchar(300) |
NO |
|
申请微信小程序开发者时,微信分配的 appSecret |
login_duration |
int(11) |
NO |
|
登录过期时间,单位为天,默认 30 天 |
session_duration |
int(11) |
NO |
|
会话过期时间,单位为秒,默认为 2592000 秒(即30天) |
会话记录 `cSessionInfo` 保存每个会话的数据。
Field |
Type |
Null |
key |
Extra |
id |
int(11) |
NO |
MUL |
会话 ID(自增长) |
uuid |
varchar(100) |
NO |
|
会话 uuid |
skey |
varchar(100) |
NO |
|
会话 Skey |
create_time |
datetime |
NO |
|
会话创建时间,用于判断会话对应的 open_id 和 session_key 是否过期(是否超过 `cAppInfo` 表中字段 `login_duration` 配置的天数) |
last_visit_time |
datetime |
NO |
|
最近访问时间,用于判断会话是否过期(是否超过 `cAppInfo` 表中字段 `session_duration` 的配置的秒数) |
open_id |
varchar(100) |
NO |
MUL |
微信服务端返回的 `open_id` 值 |
session_key |
varchar(100) |
NO |
|
微信服务端返回的 `session_key` 值 |
user_info |
varchar(2048) |
YES |
|
已解密的用户数据 |
建数据库的详细 SQL 脚本请参考 [db.sql](https://github.com/tencentyun/wafer-session-server/blob/master/db.sql)
## 搭建会话管理服务器
选择合适的方式[部署](https://github.com/tencentyun/wafer/wiki#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F) Wafer 服务后,按照部署类型:
* 自动部署 - 无需进行任何操作,会话服务器已经可以使用
* 镜像部署 - 按照下面步骤进行初始化工作
* 自行部署 - 按照下面步骤进行初始化工作
### 环境准备
确保机器中已安装 LAMP 环境。
### 代码部署
把本项目代码部署到 `/opt/lampp/htdocs/mina_auth` 目录中。
### 自动建表
执行下面命令创建运行时所需表:
```sh
/opt/lampp/bin/mysql -u root -p mypassword < /opt/lampp/htdocs/mina_auth/system/db/db.sql
```
## 初始化 appId 和 appSecret
登录到 MySql 后,手动插入配置到 `cAuth` 表中。
```sh
/opt/lampp/bin/mysql -u root -p root #登录本地mysql
use cAuth;
insert into cAppinfo set appid='Your appid',secret='Your secret';
```
### 测试服务可用性
```sh
curl -i -d'{"version":1,"componentName":"MA","interface":{"interfaceName":"qcloud.cam.id_skey","para":{"code":"001EWYiD1CVtKg0jXGjD1e6WiD1EWYiC","encrypt_data":"DNlJKYA0mJ3+RDXD/syznaLVLlaF4drGzeZvJFmjnEKtOAi37kAzC/1tCBr7KqGX8EpiLuWl8qt/kcH9a4LxDC5LQvlRLJlDogTEIwtlT/2jBWBuWwBC3vWFhm7Uuq5AOLZV+xG9UmWPKECDZX9UZpWcPRGQpiY8OOUNBAywVniJv6rC2eADFimdRR2qPiebdC3cry7QAvgvttt1Wk56Nb/1TmIbtJRTay5wb+6AY1H7AT1xPoB6XAXW3RqODXtRR0hZT1s/o5y209Vcc6EBal5QdsbJroXa020ZSD62EnlrOwgYnXy5c8SO+bzNAfRw59SVbI4wUNYz6kJb4NDn+y9dlASRjlt8Rau4xTQS+fZSi8HHUwkwE6RRak3qo8YZ7FWWbN2uwUKgQNlc/MfAfLRcfQw4XUqIdn9lxtRblaY="}}}' http://127.0.0.1/mina_auth/
```