Files
2026-10-31 19:17:37 +08:00

96 lines
6.3 KiB
Go
Raw Permalink 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_wechat_mini_config.sql)
//
// 小程序与公众号是两套独立应用,AppID / AppSecret 不可混用,
// 因此单独建表;AppSecret 以 AES-256-GCM 加密存储(复用 wechatmp 的密钥)。
// =============================================================
// WechatMiniConfig 微信小程序配置 yz_platform_wechat_mini_config(单行)
type WechatMiniConfig 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:"-"` // 加密存储,不回显
Enabled int8 `orm:"column(enabled);default(0)" json:"enabled"`
AutoBind int8 `orm:"column(auto_bind);default(1)" json:"auto_bind"` // 1:手机号命中身份后自动绑定小程序
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"`
}
func (m *WechatMiniConfig) TableName() string { return "yz_platform_wechat_mini_config" }
// WechatMiniApp 微信小程序(多应用) yz_platform_wechat_mini_app
// 支持配置多个小程序:认证端登录时按客户端传入的 appid 精确匹配
// (未传 appid 时回退第一条启用记录),AppSecret 加密存储不回显。
//
// 消息推送(小程序后台「开发管理 → 开发设置 → 消息推送」)相关字段:
// Token 与后台填写的令牌一致,用于 sha1 签名校验
// AESKey 消息加解密密钥(EncodingAESKey,43 位),加密存储不回显
// EncryptMode 加解密方式 plain / compatible / safe
// DataFormat 推送数据格式 xml / json
type WechatMiniApp struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
Name string `orm:"column(name);size(128);default('')" json:"name"`
AppID string `orm:"column(app_id);size(64)" json:"app_id"`
AppSecret string `orm:"column(app_secret);size(512)" json:"-"` // 加密存储,不回显
QrcodeURL string `orm:"column(qrcode_url);size(512);default('')" json:"qrcode_url"` // 小程序码图片地址,供官网 / H5 等其他端调取
Token string `orm:"column(token);size(128);default('')" json:"token"` // 消息推送 Token
AESKey string `orm:"column(aes_key);size(512);default('')" json:"-"` // 消息推送 EncodingAESKey(加密存储,不回显)
EncryptMode string `orm:"column(encrypt_mode);size(16);default('plain')" json:"encrypt_mode"` // plain/compatible/safe
DataFormat string `orm:"column(data_format);size(16);default('xml')" json:"data_format"` // xml/json
PushReply string `orm:"column(push_reply);size(512);default('')" json:"push_reply"` // 客服消息自动回复文案(空 = 不自动回复)
Enabled int8 `orm:"column(enabled);default(0)" json:"enabled"`
AutoBind int8 `orm:"column(auto_bind);default(1)" json:"auto_bind"` // 1:手机号命中身份后自动绑定
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 *WechatMiniApp) TableName() string { return "yz_platform_wechat_mini_app" }
// WechatMiniTemplate 小程序订阅消息模板 yz_platform_wechat_mini_template
//
// 一个小程序可配置多个「场景」模板(如站内通知 notice、审批待办 approval)。
// Fields 存微信模板字段键 → 语义变量名的映射(JSON),例如:
//
// {"thing1":"title","phrase2":"content","time3":"time"}
//
// 推送时按该映射把 title/content/time 填进微信模板的对应字段。
type WechatMiniTemplate struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
AppID string `orm:"column(app_id);size(64)" json:"app_id"`
Code string `orm:"column(code);size(64)" json:"code"` // 场景码:notice / approval / schedule ...
TemplateID string `orm:"column(template_id);size(128)" json:"template_id"` // 微信订阅消息模板 ID
Title string `orm:"column(title);size(255);default('')" json:"title"`
Page string `orm:"column(page);size(255);default('')" json:"page"` // 点击消息跳转的小程序页面
Fields string `orm:"column(fields);type(text);null" json:"fields"` // JSON:微信字段键 → 语义变量名
Enabled int8 `orm:"column(enabled);default(1)" json:"enabled"`
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 *WechatMiniTemplate) TableName() string { return "yz_platform_wechat_mini_template" }
// WechatMiniSubscribe 小程序订阅授权记录 yz_platform_wechat_mini_subscribe
//
// 微信一次性订阅消息:用户每次授权 = 1 次发送机会,发送成功即消耗 1 次。
// 这里记录每个身份(用户)对某个模板的剩余可发送次数,避免对未授权用户反复调接口。
type WechatMiniSubscribe struct {
ID uint64 `orm:"column(id);pk;auto" json:"id"`
IdentityID uint64 `orm:"column(identity_id)" json:"identity_id"`
AppID string `orm:"column(app_id);size(64)" json:"app_id"`
TemplateID string `orm:"column(template_id);size(128)" json:"template_id"`
Remain int `orm:"column(remain);default(0)" json:"remain"` // 剩余可发送次数
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
}
func (m *WechatMiniSubscribe) TableName() string { return "yz_platform_wechat_mini_subscribe" }