|
@@ -1,16 +1,22 @@
|
|
|
package wechat
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"net/url"
|
|
|
"time"
|
|
|
|
|
|
"git.chuangxin1.com/cx/myth"
|
|
|
+ "git.chuangxin1.com/cx/myth/cache"
|
|
|
)
|
|
|
|
|
|
func keyMini(appid string) string {
|
|
|
return "wechat:mini:client:" + appid
|
|
|
}
|
|
|
|
|
|
+func keyMiniToken(appid string) string {
|
|
|
+ return "wechat:mini:client:token:" + appid
|
|
|
+}
|
|
|
+
|
|
|
// NewMiniClient new mini client
|
|
|
func NewMiniClient(appID, appSecret string) *MiniClient {
|
|
|
key := keyMini(appID)
|
|
@@ -23,7 +29,7 @@ func NewMiniClient(appID, appSecret string) *MiniClient {
|
|
|
}
|
|
|
|
|
|
// GetMiniOpenID get openid by code
|
|
|
-func (mc *MiniClient) GetMiniOpenID(frm FormCode) (openid string, err error) {
|
|
|
+func (mc *MiniClient) GetMiniOpenID(frm FormCode) (s MiniSession, err error) {
|
|
|
uri := BaseURL + "/sns/jscode2session?"
|
|
|
|
|
|
args := url.Values{}
|
|
@@ -35,13 +41,35 @@ func (mc *MiniClient) GetMiniOpenID(frm FormCode) (openid string, err error) {
|
|
|
uri += args.Encode()
|
|
|
var jq *myth.JSONQuery
|
|
|
if jq, err = getJSON(uri); err == nil {
|
|
|
- openid, err = jq.String(`openid`)
|
|
|
+ s.OpenID, err = jq.String(`openid`)
|
|
|
+ s.SessionKey, _ = jq.String(`session_key`)
|
|
|
+ s.UnionID, _ = jq.String(`unionid`)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// getToken get token
|
|
|
func (mc *MiniClient) getToken() (token string, err error) {
|
|
|
+ /*
|
|
|
+ now := time.Now().Unix()
|
|
|
+ if mc.LastTokenTime > 0 {
|
|
|
+ if now-mc.LastTokenTime < TokenExpires {
|
|
|
+ token = mc.AccessToken
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // */
|
|
|
+ key := keyMiniToken(mc.AppID)
|
|
|
+ var ct ClientToken
|
|
|
+ s := ``
|
|
|
+ s, err = cache.Get(key)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = json.Unmarshal([]byte(s), &ct)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
now := time.Now().Unix()
|
|
|
if mc.LastTokenTime > 0 {
|
|
|
if now-mc.LastTokenTime < TokenExpires {
|
|
@@ -49,6 +77,7 @@ func (mc *MiniClient) getToken() (token string, err error) {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
uri := BaseURL + "/cgi-bin/token?"
|
|
|
|
|
|
args := url.Values{}
|
|
@@ -62,8 +91,11 @@ func (mc *MiniClient) getToken() (token string, err error) {
|
|
|
mc.LastTokenTime = now
|
|
|
mc.AccessToken, err = jq.String(`access_token`)
|
|
|
token = mc.AccessToken
|
|
|
- key := keyMini(mc.AppID)
|
|
|
- memcache.Store(key, mc)
|
|
|
+ k := keyMini(mc.AppID)
|
|
|
+ memcache.Store(k, mc)
|
|
|
+ ct := ClientToken{AppID: mc.AppID, AccessToken: mc.AccessToken, LastTokenTime: now}
|
|
|
+ bs, _ := json.Marshal(ct)
|
|
|
+ cache.Set(key, string(bs), 0)
|
|
|
}
|
|
|
return
|
|
|
}
|