Skip to content

Commit 9db3aa2

Browse files
committed
自动更新Token,panic后增加自动重启
1 parent 52f9f61 commit 9db3aa2

File tree

4 files changed

+60
-49
lines changed

4 files changed

+60
-49
lines changed

mini/access_token.go

+50-45
Original file line numberDiff line numberDiff line change
@@ -10,52 +10,52 @@ import (
1010

1111
// 获取小程序全局唯一后台接口调用凭据(access_token)
1212
// 微信小程序文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html
13-
func (s *SDK) getAccessToken() (err error) {
14-
defer func() {
15-
if err != nil {
16-
// reset default refresh internal
17-
s.RefreshInternal = time.Second * 20
18-
if s.callback != nil {
19-
go s.callback("", "", 0, err)
20-
}
21-
}
22-
}()
23-
24-
path := "/cgi-bin/token?grant_type=client_credential&appid=" + s.Appid + "&secret=" + s.Secret
25-
at := &AccessToken{}
26-
if _, err = s.DoRequestGet(s.ctx, path, at); err != nil {
27-
return
28-
}
29-
if at.Errcode != Success {
30-
err = fmt.Errorf("errcode(%d), errmsg(%s)", at.Errcode, at.Errmsg)
31-
return
32-
}
33-
s.accessToken = at.AccessToken
34-
s.RefreshInternal = time.Second * time.Duration(at.ExpiresIn)
35-
if s.callback != nil {
36-
go s.callback(s.Appid, at.AccessToken, at.ExpiresIn, nil)
37-
}
38-
return nil
39-
}
13+
//func (s *SDK) getAccessToken() (err error) {
14+
// defer func() {
15+
// if err != nil {
16+
// // reset default refresh internal
17+
// s.RefreshInternal = time.Second * 20
18+
// if s.callback != nil {
19+
// go s.callback("", "", 0, err)
20+
// }
21+
// }
22+
// }()
23+
//
24+
// path := "/cgi-bin/token?grant_type=client_credential&appid=" + s.Appid + "&secret=" + s.Secret
25+
// at := &AccessToken{}
26+
// if _, err = s.DoRequestGet(s.ctx, path, at); err != nil {
27+
// return
28+
// }
29+
// if at.Errcode != Success {
30+
// err = fmt.Errorf("errcode(%d), errmsg(%s)", at.Errcode, at.Errmsg)
31+
// return
32+
// }
33+
// s.accessToken = at.AccessToken
34+
// s.RefreshInternal = time.Second * time.Duration(at.ExpiresIn)
35+
// if s.callback != nil {
36+
// go s.callback(s.Appid, at.AccessToken, at.ExpiresIn, nil)
37+
// }
38+
// return nil
39+
//}
4040

41-
func (s *SDK) goAutoRefreshAccessToken() {
42-
defer func() {
43-
if r := recover(); r != nil {
44-
buf := make([]byte, 64<<10)
45-
buf = buf[:runtime.Stack(buf, false)]
46-
s.logger.Errorf("mini_goAutoRefreshAccessToken: panic recovered: %s\n%s", r, buf)
47-
}
48-
}()
49-
for {
50-
// every one hour, request new access token, default 10s
51-
time.Sleep(s.RefreshInternal / 2)
52-
err := s.getAccessToken()
53-
if err != nil {
54-
s.logger.Errorf("get access token error, after 10s retry: %+v", err)
55-
continue
56-
}
57-
}
58-
}
41+
//func (s *SDK) goAutoRefreshAccessToken() {
42+
// defer func() {
43+
// if r := recover(); r != nil {
44+
// buf := make([]byte, 64<<10)
45+
// buf = buf[:runtime.Stack(buf, false)]
46+
// s.logger.Errorf("mini_goAutoRefreshAccessToken: panic recovered: %s\n%s", r, buf)
47+
// }
48+
// }()
49+
// for {
50+
// // every one hour, request new access token, default 10s
51+
// time.Sleep(s.RefreshInternal / 2)
52+
// err := s.getAccessToken()
53+
// if err != nil {
54+
// s.logger.Errorf("get access token error, after 10s retry: %+v", err)
55+
// continue
56+
// }
57+
// }
58+
//}
5959

6060
// 获取稳定版接口调用凭据
6161
// 微信小程序文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getStableAccessToken.html
@@ -93,6 +93,11 @@ func (s *SDK) goAutoRefreshStableAccessToken() {
9393
buf := make([]byte, 64<<10)
9494
buf = buf[:runtime.Stack(buf, false)]
9595
s.logger.Errorf("mini_goAutoRefreshAccessToken: panic recovered: %s\n%s", r, buf)
96+
time.Sleep(time.Second * 3)
97+
if err := s.getStableAccessToken(); err != nil {
98+
// 失败就不再自动刷新了
99+
return
100+
}
96101
s.goAutoRefreshStableAccessToken()
97102
}
98103
}()

open/access_token.go

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ func (s *SDK) goAutoRefreshAccessTokenJob() {
4646
buf := make([]byte, 64<<10)
4747
buf = buf[:runtime.Stack(buf, false)]
4848
s.logger.Errorf("open_goAutoRefreshAccessToken: panic recovered: %s\n%s", r, buf)
49+
time.Sleep(time.Second * 3)
4950
s.goAutoRefreshAccessTokenJob()
5051
}
5152
}()

public/access_token.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,18 @@ func (s *SDK) getAccessToken() (err error) {
3636
return nil
3737
}
3838

39-
func (s *SDK) goAutoRefreshAccessToken() {
39+
func (s *SDK) goAutoRefreshAccessTokenJob() {
4040
defer func() {
4141
if r := recover(); r != nil {
4242
buf := make([]byte, 64<<10)
4343
buf = buf[:runtime.Stack(buf, false)]
44-
s.logger.Errorf("public_goAutoRefreshAccessToken: panic recovered: %s\n%s", r, buf)
45-
s.goAutoRefreshAccessToken()
44+
s.logger.Errorf("public_goAutoRefreshAccessTokenJob: panic recovered: %s\n%s", r, buf)
45+
time.Sleep(time.Second * 3)
46+
if err := s.getAccessToken(); err != nil {
47+
// 失败就不再自动刷新了
48+
return
49+
}
50+
s.goAutoRefreshAccessTokenJob()
4651
}
4752
}()
4853
for {

public/public.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func New(appid, secret string, autoManageToken bool) (p *SDK, err error) {
4747
if err = p.getAccessToken(); err != nil {
4848
return nil, err
4949
}
50-
go p.goAutoRefreshAccessToken()
50+
go p.goAutoRefreshAccessTokenJob()
5151
}
5252
return
5353
}

0 commit comments

Comments
 (0)