12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package wx
- import (
- "errors"
- "time"
- )
- type CacheItem struct {
- Value string
- ExpiresIn int64
- UpdatedAt time.Time
- }
- func (item *CacheItem) IsExpired() bool {
- periodDuration := time.Duration((item.ExpiresIn - 120) * 1000 * 1000 * 1000)
- return item.UpdatedAt.Add(periodDuration).Before(time.Now())
- }
- type WXCache interface {
- GetAccessToken() (string, error)
- GetJsTicket() (string, error)
- }
- func NewWXCache(appId, secret string) WXCache {
- return DefaultWXCache{
- "appId": appId,
- "secret": secret,
- }
- }
- type DefaultWXCache map[string]interface{}
- func (cache DefaultWXCache) GetAccessToken() (string, error) {
- if accessTokenCache, ok := cache["accessTokenCache"]; ok {
- if cacheItem, ok := accessTokenCache.(*CacheItem); ok && !cacheItem.IsExpired() {
- return cacheItem.Value, nil
- }
- }
- weixin := NewWeixin(cache["appId"].(string), cache["secret"].(string))
- accessTokenRes, err := weixin.GetAccessToken()
- if err != nil {
- return "", err
- }
- if accessTokenRes.ErrCode != 0 {
- return "", errors.New(accessTokenRes.ErrMsg)
- }
- //cache accesstoken
- tokenCache := &CacheItem{
- Value: accessTokenRes.AccessToken,
- UpdatedAt: time.Now(),
- ExpiresIn: accessTokenRes.ExpiresIn,
- }
- cache["accessTokenCache"] = tokenCache
- return accessTokenRes.AccessToken, nil
- }
- func (cache DefaultWXCache) GetJsTicket() (string, error) {
- if jsTicketCache, ok := cache["jsTicketCache"]; ok {
- if cacheItem, ok := jsTicketCache.(*CacheItem); ok && !cacheItem.IsExpired() {
- return cacheItem.Value, nil
- }
- }
- accessToken, err := cache.GetAccessToken()
- if err != nil {
- return "", err
- }
- wxJsSdk := NewJsSdk()
- ticketRes, err := wxJsSdk.GetTicket(accessToken)
- if err != nil {
- return "", err
- }
- if ticketRes.ErrCode != 0 {
- return "", errors.New(ticketRes.ErrMsg)
- }
- //cache
- //jsTicket
- ticketCache := &CacheItem{
- Value: ticketRes.Ticket,
- UpdatedAt: time.Now(),
- ExpiresIn: ticketRes.ExpiresIn,
- }
- cache["jsTicketCache"] = ticketCache
- return ticketCache.Value, nil
- }
|