Files
yunzerwebsiteallinone/go/models/wechat_mp.go
T
2026-09-30 00:57:36 +08:00

130 lines
7.6 KiB
Go
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.
package models
import "time"
// =============================================================
// 微信公众号(服务号)绑定与推送(表结构见 docs/sql/create_platform_wechat_mp.sql)
// 1. 配置:AppID / AppSecret / Token / EncodingAESKey(敏感字段加密存储)
// 2. 粉丝:关注/取关事件沉淀,可绑定平台用户或租户用户,认证后定向推送
// 3. 验证码:扫码关注 → 公众号被动回复验证码 → 平台核销完成绑定
// =============================================================
// 绑定对象类型
const (
WechatBindTypePlatformUser = "platform_user" // 平台用户(yz_system_admin_user)
WechatBindTypeTenantUser = "tenant_user" // 租户用户(yz_system_tenant_user)
)
// 验证码状态
const (
WechatVerifyStatusWaiting = 0 // 待扫码
WechatVerifyStatusScanned = 1 // 已扫码待核销
WechatVerifyStatusUsed = 2 // 已核销
WechatVerifyStatusExpired = 3 // 已过期
)
// WechatMpConfig 微信公众号(服务号)配置 yz_platform_wechat_mp_config(单行)
type WechatMpConfig struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
AppID string `orm:"column(app_id);size(64)" json:"app_id"`
AppSecret string `orm:"column(app_secret);size(512)" json:"-"` // 加密存储,不回显
Token string `orm:"column(token);size(128)" json:"token"`
AESKey string `orm:"column(aes_key);size(512)" json:"-"` // 加密存储,不回显
EncryptMode string `orm:"column(encrypt_mode);size(16)" json:"encrypt_mode"` // plain / compatible / safe
TemplateID string `orm:"column(template_id);size(128)" json:"template_id"`
Verified int8 `orm:"column(verified);default(0)" json:"verified"`
Enabled int8 `orm:"column(enabled);default(0)" json:"enabled"`
Remark string `orm:"column(remark);size(255)" json:"remark"`
FollowQrcode string `orm:"column(follow_qrcode);type(text);null" json:"follow_qrcode"` // 关注二维码(data URL)
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
}
func (m *WechatMpConfig) TableName() string { return "yz_platform_wechat_mp_config" }
// WechatMpFollower 微信公众号关注用户(粉丝) yz_platform_wechat_mp_follower
type WechatMpFollower struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
OpenID string `orm:"column(openid);size(64)" json:"openid"`
UnionID string `orm:"column(unionid);size(64)" json:"unionid"`
Nickname string `orm:"column(nickname);size(128)" json:"nickname"`
Avatar string `orm:"column(avatar);size(512)" json:"avatar"`
Sex int8 `orm:"column(sex);default(0)" json:"sex"`
City string `orm:"column(city);size(64)" json:"city"`
Province string `orm:"column(province);size(64)" json:"province"`
Country string `orm:"column(country);size(64)" json:"country"`
Subscribe int8 `orm:"column(subscribe);default(1)" json:"subscribe"`
SubscribeTime *time.Time `orm:"column(subscribe_time);type(datetime);null" json:"subscribe_time"`
UnsubscribeTime *time.Time `orm:"column(unsubscribe_time);type(datetime);null" json:"unsubscribe_time"`
BindType string `orm:"column(bind_type);size(32)" json:"bind_type"`
BindID uint64 `orm:"column(bind_id)" json:"bind_id"`
BindTid uint64 `orm:"column(bind_tid)" json:"bind_tid"`
BindTime *time.Time `orm:"column(bind_time);type(datetime);null" json:"bind_time"`
Remark string `orm:"column(remark);size(255)" json:"remark"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
}
func (m *WechatMpFollower) TableName() string { return "yz_platform_wechat_mp_follower" }
// WechatMpVerifyCode 公众号关注取码/绑定验证码 yz_platform_wechat_mp_verify_code
type WechatMpVerifyCode struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
Scene string `orm:"column(scene);size(64)" json:"scene"`
Code string `orm:"column(code);size(8)" json:"code"`
OpenID string `orm:"column(openid);size(64)" json:"openid"`
Status int8 `orm:"column(status);default(0)" json:"status"`
BindType string `orm:"column(bind_type);size(32)" json:"bind_type"`
BindID uint64 `orm:"column(bind_id)" json:"bind_id"`
BindTid uint64 `orm:"column(bind_tid)" json:"bind_tid"`
ExpireAt *time.Time `orm:"column(expire_at);type(datetime);null" json:"expire_at"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
}
func (m *WechatMpVerifyCode) TableName() string { return "yz_platform_wechat_mp_verify_code" }
// WechatMpLoginToken 公众号一次性登录令牌 yz_platform_wechat_mp_login_token
// 用户在公众号内发送「登录」→ 生成一次性令牌并回复登录链接 →
// 用户在微信内打开链接,前端用令牌换取正式登录态(未认证公众号无法使用网页授权,用此方案替代)。
type WechatMpLoginToken struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
Token string `orm:"column(token);size(64)" json:"token"`
OpenID string `orm:"column(openid);size(64)" json:"openid"`
BindType string `orm:"column(bind_type);size(32)" json:"bind_type"`
BindID uint64 `orm:"column(bind_id)" json:"bind_id"`
BindTid uint64 `orm:"column(bind_tid)" json:"bind_tid"`
ExpireAt time.Time `orm:"column(expire_at);type(datetime)" json:"expire_at"`
UsedAt *time.Time `orm:"column(used_at);type(datetime);null" json:"used_at"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
}
func (m *WechatMpLoginToken) TableName() string { return "yz_platform_wechat_mp_login_token" }
// 扫码登录会话状态
const (
WechatScanLoginPending = 0 // 待确认(等待用户点击确认链接)
WechatScanLoginOK = 1 // 已确认(待 PC 端领取令牌)
WechatScanLoginExpired = 2 // 已过期
WechatScanLoginPicked = 3 // 令牌已领取
)
// WechatMpScanLogin 公众号扫码登录会话 yz_platform_wechat_mp_scan_login
type WechatMpScanLogin struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
Scene string `orm:"column(scene);size(64)" json:"scene"`
Code string `orm:"column(code);size(8)" json:"code"`
OpenID string `orm:"column(openid);size(64);default('')" json:"openid"`
Status int8 `orm:"column(status);default(0)" json:"status"`
LoginToken string `orm:"column(login_token);size(64);default('')" json:"login_token"`
BindType string `orm:"column(bind_type);size(32);default('')" json:"bind_type"`
BindID uint64 `orm:"column(bind_id);default(0)" json:"bind_id"`
BindTid uint64 `orm:"column(bind_tid);default(0)" json:"bind_tid"`
ExpireAt time.Time `orm:"column(expire_at);type(datetime)" json:"expire_at"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
}
func (m *WechatMpScanLogin) TableName() string { return "yz_platform_wechat_mp_scan_login" }