diff --git a/config.yml b/config.yml index 83e90a3..a6876bd 100644 --- a/config.yml +++ b/config.yml @@ -90,8 +90,8 @@ gb28181: sip: tcp:5060 # 萤石摄像头token ys: - appKey: 2db7f777fa6f44bdaf1c20b7f065887c - secret: bf59b1a2168da4b443473efe9b1cf1b0 + appKey: "" + secret: "" log: # 日志等级, trace, debug, info, warn, error, fatal diff --git a/pkg/ys/device.go b/pkg/ys/device.go index e6e5a09..73f1480 100644 --- a/pkg/ys/device.go +++ b/pkg/ys/device.go @@ -22,7 +22,7 @@ func (ys *Ys) GetDeviceList(pageNum, pageSize int) (devices []Device, total int6 if err != nil { return nil, 0, err } - var page Page + var page = Page{} err = tool.InterfaceToStruct(status.Page, &page) if err != nil { return nil, 0, err diff --git a/pkg/ys/ys.go b/pkg/ys/ys.go index 6422454..624d286 100644 --- a/pkg/ys/ys.go +++ b/pkg/ys/ys.go @@ -5,19 +5,25 @@ import ( "errors" "fmt" "io/ioutil" + "log" "net/http" "strings" "time" ) const ( + MASTERACC = 0 //主账号 + RAMACC = 1 //子账号 //[用户]获取accessToken ACCESSTOKEN = "https://open.ys7.com/api/lapp/token/get" + RAMTOKENGET = "https://open.ys7.com/api/lapp/ram/token/get" //获取子账户AccessToken ) type Ys struct { AppKey string Secret string + IsRAM int + AccountID string AccessToken string ExpireTime int64 } @@ -27,15 +33,41 @@ func (ys *Ys) GetAccessToken() error { params["appKey"] = ys.AppKey params["appSecret"] = ys.Secret ac := &AccessToken{} - _, err := ys.requset("POST", ACCESSTOKEN, params, &ac) + _, err := ys.requset("POST", ACCESSTOKEN, params, ac) if err != nil { return err } - ys.AccessToken = ac.AccessToken - ys.ExpireTime = ac.ExpireTime + if ys.IsRAM == MASTERACC { + ys.AccessToken = ac.AccessToken + ys.ExpireTime = ac.ExpireTime + } else { + ys.AccessToken = ac.AccessToken + ac, err = ys.RAMGetAccessToken(ys.AccountID) + if err != nil { + ys.AccessToken = "" + return err + } + ys.AccessToken = ac.AccessToken + ys.ExpireTime = ac.ExpireTime + } + return nil } +// RAMGetAccessToken 获取B模式子账户accessToken +func (ys *Ys) RAMGetAccessToken(accountID string) (ac *AccessToken, err error) { + params := make(map[string]interface{}) + params["accountId"] = accountID + params["accessToken"] = ys.AccessToken + ac = &AccessToken{} + _, err = ys.requset("POST", RAMTOKENGET, params, ac) + if err != nil { + return nil, err + } + log.Println(*ac) + return ac, nil +} + func (ys *Ys) requset(method, url string, params map[string]interface{}, data interface{}) (status *Status, err error) { defer func() { if Rerr := recover(); Rerr != nil { @@ -79,7 +111,7 @@ func (ys *Ys) requset(method, url string, params map[string]interface{}, data in func (ys *Ys) authorizeRequset(method, url string, params map[string]interface{}, data interface{}) (status *Status, err error) { exTime := time.Unix(ys.ExpireTime/1000, 0) - if exTime.Unix() < time.Now().Unix() || ys.AccessToken == "" { + if exTime.Unix() < time.Now().Unix() { ys.GetAccessToken() } defer func() { @@ -88,6 +120,7 @@ func (ys *Ys) authorizeRequset(method, url string, params map[string]interface{} return } }() + log.Println("初始化token", *ys) params["accessToken"] = ys.AccessToken status, err = ys.requset(method, url, params, data) return diff --git a/pkg/ys/ys_test.go b/pkg/ys/ys_test.go new file mode 100644 index 0000000..f5ae6b2 --- /dev/null +++ b/pkg/ys/ys_test.go @@ -0,0 +1,18 @@ +package ys + +import "testing" + +func TestYs_GetDeviceList(t *testing.T) { + ys := &Ys{ + AppKey: "", + Secret: "", + IsRAM: 0, + AccountID: "", + } + devices, total, err := ys.GetDeviceList(1, 10) + if err != nil { + t.Error(err) + } + t.Log(devices) + t.Log(total) +}