diff --git a/types.go b/types.go index 91d2f9b..e49dcb5 100644 --- a/types.go +++ b/types.go @@ -1,6 +1,7 @@ package paypalsdk import ( + "encoding/json" "fmt" "io" "net/http" @@ -454,12 +455,14 @@ type ( Phone string `json:"phone,omitempty"` } + expirationTime int64 + // TokenResponse is for API response for the /oauth2/token endpoint TokenResponse struct { - RefreshToken string `json:"refresh_token"` - Token string `json:"access_token"` - Type string `json:"token_type"` - ExpiresIn int64 `json:"expires_in"` + RefreshToken string `json:"refresh_token"` + Token string `json:"access_token"` + Type string `json:"token_type"` + ExpiresIn expirationTime `json:"expires_in"` } // Transaction struct @@ -544,3 +547,17 @@ func (t JSONTime) MarshalJSON() ([]byte, error) { stamp := fmt.Sprintf(`"%s"`, time.Time(t).UTC().Format(time.RFC3339)) return []byte(stamp), nil } + +func (e *expirationTime) UnmarshalJSON(b []byte) error { + var n json.Number + err := json.Unmarshal(b, &n) + if err != nil { + return err + } + i, err := n.Int64() + if err != nil { + return err + } + *e = expirationTime(i) + return nil +}