2.3 KiB
2.3 KiB
微信小程序登录服务
记录小程序端 wx.login 换取 openid 并写入数据库的后端服务说明。
配置
- 复制
.env.example为.env。 - 按实际环境填写以下变量:
SERVER_PORT:HTTP 服务端口,例如8080。DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME:MySQL 连接信息。WECHAT_APP_ID、WECHAT_APP_SECRET:小程序后台appId与secret(例如用户提供的wx67444119b166caa0/eb57cd73ff48a10b14df484e1d20facf)。
- 如果需要,替换
GIN_MODE、JWT_SECRET等其他变量。
启动
go run ./cmd/api
启动流程:
- 加载
.env。 - 初始化数据库连接(参见
internal/database/database.go)。 - 自动迁移
internal/model/user.go中的users表。 - 注册路由并启动 Gin HTTP 服务。
数据表 users
| 字段 | 类型 | 说明 |
|---|---|---|
id |
bigint unsigned (auto increment) | 主键 |
open_id |
varchar(100), unique | 微信 openid,登录唯一标识 |
union_id |
varchar(100), nullable | 微信 unionid(若有) |
nick_name |
varchar(100) | 用户昵称 |
avatar_url |
varchar(500) | 头像地址 |
gender |
tinyint, default 0 | 性别(与小程序一致) |
phone |
varchar(20) | 手机号 |
session_key |
varchar(100) | 微信会话密钥 |
created_at/updated_at/deleted_at |
timestamp | GORM 默认时间戳 |
接口
POST /api/v1/auth/login
- 说明:接收小程序端
wx.login返回的code,向微信jscode2session请求openid/session_key。若open_id不存在则创建用户,存在则更新资料并返回用户信息。 - 请求体
{
"code": "wx.login返回的code",
"nickname": "可选",
"avatar_url": "可选",
"gender": 1,
"phone": "110"
}
- 响应体
{
"code": 200,
"message": "success",
"data": {
"user": {
"id": 1,
"open_id": "oXXX",
"union_id": "可选",
"nickname": "昵称",
"avatar_url": "链接",
"gender": 1,
"phone": "110"
},
"session_key": "wx-session-key"
}
}
- 错误
400:code缺失或请求体非法。502:微信 API 返回错误。500:数据库或其他内部异常。
健康检查
GET /healthz 返回 {"status": "ok"},用于部署探活。