Files
yunzerwebsiteallinone/go/docs/sql/create_platform_wechat_mp.sql
T
2026-09-16 18:06:18 +08:00

102 lines
7.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================
-- 微信公众号(服务号)绑定与推送
--
-- 业务说明:
-- 1. 服务号配置(yz_platform_wechat_mp_config):AppID / AppSecret / Token / EncodingAESKey,
-- 其中 AppSecret 与 EncodingAESKey 以 AES-256-GCM 加密后存储
-- (密钥取 app.conf 的 wechat_mp_secret_key,代码内部 SHA-256 派生)。
-- 2. 关注用户(yz_platform_wechat_mp_follower):用户关注/取关事件沉淀,openid 维度唯一;
-- 通过「扫码关注 → 公众号回复验证码 → 平台输入验证码」流程绑定到
-- 平台用户(platform_user)或租户用户(tenant_user),认证后可定向推送。
-- 3. 验证码(yz_platform_wechat_mp_verify_code):一次绑定会话一条,scene 绑定二维码场景值,
-- 默认 5 分钟有效;状态:0待扫码 1已扫码待核销 2已核销 3已过期。
--
-- 未认证服务号限制:仅支持服务器配置、关注/扫码事件、被动回复、带参数二维码;
-- 模板消息/订阅通知/客服消息需认证后用。
--
-- 本脚本可重复执行:建表用 IF NOT EXISTS,旧表名(yz_wechat_*)做存在性改名兼容。
-- 运行:mysql --default-character-set=utf8mb4 -h<host> -P<port> -u<user> -p <db> < create_platform_wechat_mp.sql
-- =============================================================
-- 0) 兼容早期表名(yz_wechat_mp_config / yz_wechat_follower / yz_wechat_verify_code):
-- 旧表存在且新表不存在时直接改名,保留已配置数据。
SET @old := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_wechat_mp_config');
SET @new := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_platform_wechat_mp_config');
SET @ddl := IF(@old > 0 AND @new = 0, 'RENAME TABLE `yz_wechat_mp_config` TO `yz_platform_wechat_mp_config`', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @old := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_wechat_follower');
SET @new := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_platform_wechat_mp_follower');
SET @ddl := IF(@old > 0 AND @new = 0, 'RENAME TABLE `yz_wechat_follower` TO `yz_platform_wechat_mp_follower`', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @old := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_wechat_verify_code');
SET @new := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_platform_wechat_mp_verify_code');
SET @ddl := IF(@old > 0 AND @new = 0, 'RENAME TABLE `yz_wechat_verify_code` TO `yz_platform_wechat_mp_verify_code`', 'DO 0');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- 1) 服务号配置(单行)
CREATE TABLE IF NOT EXISTS `yz_platform_wechat_mp_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
`app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '公众号 AppID',
`app_secret` varchar(512) NOT NULL DEFAULT '' COMMENT 'AppSecret(AES 加密存储)',
`token` varchar(128) NOT NULL DEFAULT '' COMMENT '服务器配置 Token(自定义,用于签名校验)',
`aes_key` varchar(512) NOT NULL DEFAULT '' COMMENT 'EncodingAESKey(43位,AES 加密存储)',
`encrypt_mode` varchar(16) NOT NULL DEFAULT 'plain' COMMENT '消息加解密方式:plain明文 compatible兼容 safe安全',
`template_id` varchar(128) NOT NULL DEFAULT '' COMMENT '模板消息ID(认证后在公众号后台申请后填入)',
`verified` tinyint(4) NOT NULL DEFAULT 0 COMMENT '公众号是否已认证:1是 0否(认证后才可主动推送)',
`enabled` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否启用:1启用 0停用',
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信公众号(服务号)配置表';
-- 2) 关注用户(粉丝)
CREATE TABLE IF NOT EXISTS `yz_platform_wechat_mp_follower` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
`openid` varchar(64) NOT NULL DEFAULT '' COMMENT '微信 openid(公众号维度用户标识)',
`unionid` varchar(64) NOT NULL DEFAULT '' COMMENT '微信 unionid(开放平台绑定后才有)',
`nickname` varchar(128) NOT NULL DEFAULT '' COMMENT '昵称(未认证公众号可能拉取不到,留空展示 openid 缩写)',
`avatar` varchar(512) NOT NULL DEFAULT '' COMMENT '头像地址',
`sex` tinyint(4) NOT NULL DEFAULT 0 COMMENT '性别:0未知 1男 2女',
`city` varchar(64) NOT NULL DEFAULT '' COMMENT '城市',
`province` varchar(64) NOT NULL DEFAULT '' COMMENT '省份',
`country` varchar(64) NOT NULL DEFAULT '' COMMENT '国家',
`subscribe` tinyint(4) NOT NULL DEFAULT 1 COMMENT '关注状态:1已关注 0已取关',
`subscribe_time` datetime DEFAULT NULL COMMENT '关注时间',
`unsubscribe_time` datetime DEFAULT NULL COMMENT '取关时间',
`bind_type` varchar(32) NOT NULL DEFAULT '' COMMENT '绑定对象:platform_user平台用户 tenant_user租户用户 空=未绑定',
`bind_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '绑定对象ID(平台用户ID / 租户用户ID)',
`bind_tid` bigint(20) NOT NULL DEFAULT 0 COMMENT '绑定租户ID(租户用户时记录)',
`bind_time` datetime DEFAULT NULL COMMENT '绑定时间',
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注(平台可编辑)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_openid` (`openid`),
KEY `idx_bind` (`bind_type`,`bind_id`),
KEY `idx_subscribe` (`subscribe`),
KEY `idx_delete_time` (`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信公众号关注用户(粉丝)表';
-- 3) 关注验证码(绑定会话)
CREATE TABLE IF NOT EXISTS `yz_platform_wechat_mp_verify_code` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
`scene` varchar(64) NOT NULL DEFAULT '' COMMENT '二维码场景值(随机串,唯一)',
`code` varchar(8) NOT NULL DEFAULT '' COMMENT '验证码(6位数字,公众号被动回复给用户)',
`openid` varchar(64) NOT NULL DEFAULT '' COMMENT '扫码用户 openid(扫码后写入)',
`status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态:0待扫码 1已扫码待核销 2已核销 3已过期',
`bind_type` varchar(32) NOT NULL DEFAULT '' COMMENT '发起绑定方:platform_user / tenant_user',
`bind_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '发起绑定方ID',
`bind_tid` bigint(20) NOT NULL DEFAULT 0 COMMENT '发起绑定租户ID',
`expire_at` datetime DEFAULT NULL COMMENT '有效期截止(默认5分钟)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_scene` (`scene`),
KEY `idx_openid` (`openid`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信公众号关注取码/绑定验证码表';