53 lines
1.4 KiB
Go
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)
|
|
}
|