微信公众号登录系统

基于 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 — 用户表

字段类型说明
openidVARCHAR(128)微信 OpenID(唯一)
nicknameVARCHAR(64)微信昵称
avatarVARCHAR(512)微信头像
pointsINT积分(默认0)

verification_codes — 验证码表

字段类型说明
codeVARCHAR(8)6位验证码
openidVARCHAR(128)用户 OpenID
statusENUMpending / used / expired
expires_atDATETIME5分钟有效期

checkins — 签到表

字段类型说明
openidVARCHAR(128)用户 OpenID
checkin_dateDATE签到日期(每天唯一)
points_earnedINT获得积分(默认1)