You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1013 B
45 lines
1013 B
package paypal
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
func GetAccessToken() (error, *AccessToken) {
|
|
return client.AccessToken()
|
|
}
|
|
|
|
func (c *Client) AccessToken() (error, *AccessToken) {
|
|
var (
|
|
err error
|
|
body = make(url.Values)
|
|
result AccessToken
|
|
)
|
|
body.Set("grant_type", "client_credentials")
|
|
req, err := http.NewRequest(http.MethodPost, baseurl+accessToken, bytes.NewBufferString(body.Encode()))
|
|
if err != nil {
|
|
return err, nil
|
|
}
|
|
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
|
|
authEncoded := base64.StdEncoding.EncodeToString([]byte(c.ClientId + ":" + c.ClientSecret))
|
|
req.Header.Set("Authorization", "Basic "+authEncoded)
|
|
client := &http.Client{}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
return err, nil
|
|
}
|
|
defer resp.Body.Close()
|
|
respBody, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return err, nil
|
|
}
|
|
err = json.Unmarshal(respBody, &result)
|
|
if err != nil {
|
|
return err, nil
|
|
}
|
|
return nil, &result
|
|
}
|
|
|