diff --git a/client.go b/client.go index 324a7c7..4802a4c 100644 --- a/client.go +++ b/client.go @@ -9,6 +9,7 @@ import ( "io/ioutil" "net/http" "net/http/httputil" + "time" ) // NewClient returns new Client struct @@ -45,6 +46,7 @@ func (c *Client) GetAccessToken() (*TokenResponse, error) { // Set Token fur current Client if t.Token != "" { c.Token = &t + c.tokenExpiresAt = time.Now().Add(time.Duration(t.ExpiresIn) * time.Second) } return &t, err @@ -62,6 +64,7 @@ func (c *Client) SetAccessToken(token string) error { c.Token = &TokenResponse{ Token: token, } + c.tokenExpiresAt = time.Unix(0, 0) return nil } @@ -131,7 +134,7 @@ func (c *Client) Send(req *http.Request, v interface{}) error { // client.Token will be updated when changed func (c *Client) SendWithAuth(req *http.Request, v interface{}) error { if c.Token != nil { - if c.Token.ExpiresIn < RequestNewTokenBeforeExpiresIn { + if !c.tokenExpiresAt.IsZero() && c.tokenExpiresAt.Sub(time.Now()) < RequestNewTokenBeforeExpiresIn { // c.Token will be updated in GetAccessToken call if _, err := c.GetAccessToken(); err != nil { return err diff --git a/types.go b/types.go index 4cfe166..074a46f 100644 --- a/types.go +++ b/types.go @@ -15,7 +15,7 @@ const ( APIBaseLive = "https://api.paypal.com" // RequestNewTokenBeforeExpiresIn is used by SendWithAuth and try to get new Token when it's about to expire - RequestNewTokenBeforeExpiresIn = 60 + RequestNewTokenBeforeExpiresIn = time.Duration(60) * time.Second ) // Possible values for `no_shipping` in InputFields @@ -113,6 +113,7 @@ type ( APIBase string Log io.Writer // If user set log file name all requests will be logged there Token *TokenResponse + tokenExpiresAt time.Time } // CreditCard struct