github.com/plutov/paypal/v4@v4.7.1/identity.go (about) 1 package paypal 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 "net/url" 8 "strings" 9 ) 10 11 // GrantNewAccessTokenFromAuthCode - Use this call to grant a new access token, using the previously obtained authorization code. 12 // Endpoint: POST /v1/identity/openidconnect/tokenservice 13 func (c *Client) GrantNewAccessTokenFromAuthCode(ctx context.Context, code, redirectURI string) (*TokenResponse, error) { 14 token := &TokenResponse{} 15 16 q := url.Values{} 17 q.Set("grant_type", "authorization_code") 18 q.Set("code", code) 19 q.Set("redirect_uri", redirectURI) 20 21 req, err := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("%s%s", c.APIBase, "/v1/identity/openidconnect/tokenservice"), strings.NewReader(q.Encode())) 22 if err != nil { 23 return token, err 24 } 25 26 req.Header.Add("Content-Type", "application/x-www-form-urlencoded") 27 28 if err = c.SendWithBasicAuth(req, token); err != nil { 29 return token, err 30 } 31 32 return token, nil 33 } 34 35 // GrantNewAccessTokenFromRefreshToken - Use this call to grant a new access token, using a refresh token. 36 // Endpoint: POST /v1/identity/openidconnect/tokenservice 37 func (c *Client) GrantNewAccessTokenFromRefreshToken(ctx context.Context, refreshToken string) (*TokenResponse, error) { 38 type request struct { 39 GrantType string `json:"grant_type"` 40 RefreshToken string `json:"refresh_token"` 41 } 42 43 token := &TokenResponse{} 44 45 req, err := c.NewRequest(ctx, "POST", fmt.Sprintf("%s%s", c.APIBase, "/v1/identity/openidconnect/tokenservice"), request{GrantType: "refresh_token", RefreshToken: refreshToken}) 46 if err != nil { 47 return token, err 48 } 49 50 if err = c.SendWithAuth(req, token); err != nil { 51 return token, err 52 } 53 54 return token, nil 55 } 56 57 // GetUserInfo - Use this call to retrieve user profile attributes. 58 // Endpoint: GET /v1/identity/openidconnect/userinfo/?schema=<Schema> 59 // Pass the schema that is used to return as per openidconnect protocol. The only supported schema value is openid. 60 func (c *Client) GetUserInfo(ctx context.Context, schema string) (*UserInfo, error) { 61 u := &UserInfo{} 62 63 req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s%s%s", c.APIBase, "/v1/identity/openidconnect/userinfo/?schema=", schema), nil) 64 if err != nil { 65 return u, err 66 } 67 68 if err = c.SendWithAuth(req, u); err != nil { 69 return u, err 70 } 71 72 return u, nil 73 }