本项目是 Wafer 组成部分,提供会话服务供 SDK 或独立使用。
会话服务的实现细请参考 Wiki。
会话服务器提供 HTTP 接口来实现会话管理,下面是协议说明。
- 协议类型:
HTTP
- 传输方式:
POST
- 编码类型:
UTF-8
- 编码格式:
JSON
请求示例:
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
响应示例:
{
"returnCode": 0,
"returnMessage": "OK",
"returnData": {
"id": "...",
"skey": "..."
}
}
returnCode
- 返回码,如果成功则取值为0
,如果失败则取值为具体错误码;returnMessage
- 如果返回码非零,内容为出错信息;returnData
- 返回的数据
qcloud.cam.id_skey
处理用户登录请求。
使用示例:
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
- 会话 idskey
- 会话 skeyuserInfo
- 用户信息
使用 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
选择合适的方式部署 Wafer 服务后,按照部署类型:
- 自动部署 - 无需进行任何操作,会话服务器已经可以使用
- 镜像部署 - 按照下面步骤进行初始化工作
- 自行部署 - 按照下面步骤进行初始化工作
确保机器中已安装 LAMP 环境。
把本项目代码部署到 /opt/lampp/htdocs/mina_auth
目录中。
执行下面命令创建运行时所需表:
/opt/lampp/bin/mysql -u root -p mypassword < /opt/lampp/htdocs/mina_auth/system/db/db.sql
登录到 MySql 后,手动插入配置到 cAuth
表中。
/opt/lampp/bin/mysql -u root -p root #登录本地mysql
use cAuth;
insert into cAppinfo set appid='Your appid',secret='Your secret';
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/