微信公众号登录系统
基于 Node.js + Express + MySQL 的微信登录与签到积分系统
点击右上角 「登录」 按钮,扫码关注公众号获取验证码即可登录。
GET 获取二维码
获取公众号二维码图片,展示在登录弹窗中供用户扫码关注。
GET /api/qrcode
// 成功响应
{
"success": true,
"data": {
"qrcodeUrl": "/wechat-qrcode.jpg"
}
}
POST 验证码登录
用户输入从微信获取的6位验证码,验证通过后返回 JWT Token 和用户信息。
POST /api/login
// 请求参数(JSON) { "code": "123456" } // 成功响应 { "success": true, "data": { "token": "eyJhbGciOiJIUzI1NiIs...", "user": { "openid": "oV_xxxxx", "nickname": "用户昵称", "avatar": "https://wx.qlogo.cn/..." } } } // 失败响应 { "success": false, "message": "验证码无效或已过期" }
GET 获取用户信息 需 Token
通过 Bearer Token 获取当前登录用户的详细信息。
GET /api/me
Authorization: Bearer <token>
// 成功响应
{
"success": true,
"data": {
"user": {
"openid": "oV_xxxxx",
"nickname": "用户昵称",
"avatar": "https://wx.qlogo.cn/..."
}
}
}
POST 每日签到 需 Token
用户每天可签到一次,每次获得 1 积分。重复签到返回已签到状态。
POST /api/checkin
// 签到成功 { "success": true, "data": { "checked": true, "points": 1, "total": 5, "message": "签到成功" } } // 今日已签到 { "success": false, "data": { "checked": false, "total": 5, "message": "今天已签到" } }
GET 查询积分 需 Token
查询当前用户的积分总数和今日是否已签到。
GET /api/points
// 响应
{
"success": true,
"data": {
"points": 5,
"checkedToday": false
}
}
POST 退出登录
退出当前登录状态,客户端清除 Token 即可。
POST /api/logout
{ "success": true, "message": "已退出登录" }
GET 健康检查
检测服务是否正常运行。
GET /api/health
{ "status": "ok", "mode": "production" }
数据表结构
users — 用户表
| 字段 | 类型 | 说明 |
|---|---|---|
| openid | VARCHAR(128) | 微信 OpenID(唯一) |
| nickname | VARCHAR(64) | 微信昵称 |
| avatar | VARCHAR(512) | 微信头像 |
| points | INT | 积分(默认0) |
verification_codes — 验证码表
| 字段 | 类型 | 说明 |
|---|---|---|
| code | VARCHAR(8) | 6位验证码 |
| openid | VARCHAR(128) | 用户 OpenID |
| status | ENUM | pending / used / expired |
| expires_at | DATETIME | 5分钟有效期 |
checkins — 签到表
| 字段 | 类型 | 说明 |
|---|---|---|
| openid | VARCHAR(128) | 用户 OpenID |
| checkin_date | DATE | 签到日期(每天唯一) |
| points_earned | INT | 获得积分(默认1) |