Files
devstar-create-from-template/services/wechat/qr-cache.go
2025-08-25 15:46:12 +08:00

53 lines
1.4 KiB
Go

package wechat
import (
"code.gitea.io/gitea/modules/cache"
"code.gitea.io/gitea/modules/json"
)
const (
// KeyPrefix 缓存键前缀:微信公众号二维码 Ticket
KeyPrefix = "wechat:official-account:qr:ticket:"
)
// SetWechatQrTicketWithTTL 设置 WeChat QR Ticket 与 VO JSON 的映射关系,并设置过期时间
func SetWechatQrTicketWithTTL(ticket, valueJSON string, ttl int) (ok bool) {
keyStr := KeyPrefix + ticket
err := cache.GetCache().Put(keyStr, valueJSON, int64(ttl))
return err == nil
}
// 获取 WeChat QR Ticket 扫码状态(只读取状态、不删除)
func GetWechatQrStatusByTicket(ticket string) (*WechatTempQRStatus, error) {
// 1. 将 ticket 与二维码缓存键拼接,作为 cache key 查询缓存
keyStr := KeyPrefix + ticket
wechatQrCacher := cache.GetCache()
qrStatusJson, ok := wechatQrCacher.Get(keyStr)
if !ok {
return &WechatTempQRStatus{
IsScanned: false,
}, nil
}
// 2. 对缓存查询结果进行 JSON 反序列化为 VO 对象
var qrStatus WechatTempQRStatus
err := json.Unmarshal([]byte(qrStatusJson), &qrStatus)
if err != nil {
return nil, ErrorWechatTempQRStatus{
Action: "Convert QR Status",
Message: err.Error(),
}
}
return &qrStatus, nil
}
// DeleteWechatQrByTicket 通过 ticket 删除微信公众号临时二维码缓存记录
func DeleteWechatQrByTicket(ticket string) error {
keyStr := KeyPrefix + ticket
return cache.GetCache().Delete(keyStr)
}