|
@@ -20,6 +20,10 @@ func keyToken(appid string) string {
|
|
|
return "wechat:client:token:" + appid
|
|
|
}
|
|
|
|
|
|
+func keyTicket(appid string) string {
|
|
|
+ return "wechat:client:ticket:" + appid
|
|
|
+}
|
|
|
+
|
|
|
// NewClient new client
|
|
|
func NewClient(appID, appSecret, token, encodingAESKey string) *Client {
|
|
|
key := keyC(appID)
|
|
@@ -57,6 +61,12 @@ func (wc *Client) getToken() (token string, err error) {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ token, err = wc.upToken(key, now)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func (wc *Client) upToken(key string, now int64) (token string, err error) {
|
|
|
uri := BaseURL + "/cgi-bin/token?"
|
|
|
|
|
|
args := url.Values{}
|
|
@@ -83,7 +93,32 @@ func (wc *Client) getToken() (token string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// 更新公众号 access_token
|
|
|
+func (wc *Client) UpdateToken() (token string, err error) {
|
|
|
+ key := keyC(wc.AppID)
|
|
|
+ token, err = wc.upToken(key, time.Now().Unix())
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
func (wc *Client) getTicket(now int64) (ticket string, err error) {
|
|
|
+ key := keyTicket(wc.AppID)
|
|
|
+
|
|
|
+ if wc.UseCacheToken {
|
|
|
+ var ct ClientTicket
|
|
|
+ s := ``
|
|
|
+ s, err = cache.Get(key)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = json.Unmarshal([]byte(s), &ct)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ticket = ct.Ticket
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //now := time.Now().Unix()
|
|
|
var jq *myth.JSONQuery
|
|
|
if wc.LastTicketTime > 0 {
|
|
|
if now-wc.LastTicketTime < TicketExpires {
|
|
@@ -110,6 +145,36 @@ func (wc *Client) getTicket(now int64) (ticket string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func (wc *Client) upTicket(now int64) (ticket string, err error) {
|
|
|
+ key := keyTicket(wc.AppID)
|
|
|
+ var jq *myth.JSONQuery
|
|
|
+ args := url.Values{}
|
|
|
+ args.Add("access_token", wc.AccessToken)
|
|
|
+ args.Add("type", "jsapi")
|
|
|
+
|
|
|
+ uri := BaseURL + "/cgi-bin/ticket/getticket?"
|
|
|
+ uri += args.Encode()
|
|
|
+ if jq, err = getJSON(uri); err == nil {
|
|
|
+ ticket, err = jq.String(`ticket`)
|
|
|
+ wc.LastTicketTime = now
|
|
|
+ wc.Ticket = ticket
|
|
|
+
|
|
|
+ var ct ClientTicket
|
|
|
+ ct.AppID = wc.AppID
|
|
|
+ ct.LastTicketTime = now
|
|
|
+ ct.Ticket = ticket
|
|
|
+ bs, _ := json.Marshal(ct)
|
|
|
+ cache.Set(key, string(bs), 0)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 更新公众号 js ticket
|
|
|
+func (wc *Client) UpdateTicket() (ticket string, err error) {
|
|
|
+ ticket, err = wc.upTicket(time.Now().Unix())
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
// TokenUseCache token from cache
|
|
|
func (wc *Client) TokenUseCache(ok bool) {
|
|
|
wc.UseCacheToken = ok
|