Sample code for 30+ languages & platforms
Go

ETrade Renew Access Token

See more ETrade Examples

Renews an ETrade OAuth access token.

Chilkat Go Downloads

Go
    success := false

    // This requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    http := chilkat.NewHttp()

    http.SetOAuth1(true)
    http.SetOAuthVerifier("")
    http.SetOAuthConsumerKey("ETRADE_CONSUMER_KEY")
    http.SetOAuthConsumerSecret("ETRADE_CONSUMER_SECRET")

    // Load the access token previously obtained via the OAuth1 Authorization
    jsonToken := chilkat.NewJsonObject()
    success = jsonToken.LoadFile("qa_data/tokens/etrade.json")
    if success != true {
        fmt.Println("Failed to load OAuth1 token")
        http.DisposeHttp()
        jsonToken.DisposeJsonObject()
        return
    }

    http.SetOAuthToken(jsonToken.StringOf("oauth_token"))
    http.SetOAuthTokenSecret(jsonToken.StringOf("oauth_token_secret"))

    resp := chilkat.NewHttpResponse()
    success = http.HttpNoBody("GET","https://api.etrade.com/oauth/renew_access_token",resp)
    if success == false {
        fmt.Println(http.LastErrorText())
        http.DisposeHttp()
        jsonToken.DisposeJsonObject()
        resp.DisposeHttpResponse()
        return
    }

    // Make sure a successful response was received.
    if resp.StatusCode() != 200 {
        fmt.Println(resp.StatusLine())
        fmt.Println(resp.Header())
        fmt.Println(resp.BodyStr())
        http.DisposeHttp()
        jsonToken.DisposeJsonObject()
        resp.DisposeHttpResponse()
        return
    }

    // If successful, the resp.BodyStr contains something like this:
    // oauth_token=%3TiQRgQCRGPo7Xdk6G8QDSEzX0Jsy6sKNcULcDavAGgU%3D&oauth_token_secret=%7RrC9scEpzcwSEMy4vE7nodSzPLqfRINnTNY4voczyFM%3D
    fmt.Println(resp.BodyStr())

    sbRespBody := chilkat.NewStringBuilder()
    resp.GetBodySb(sbRespBody)
    if sbRespBody.ContentsEqual("Access Token has been renewed",false) {
        // The documentation at https://apisb.etrade.com/docs/api/authorization/renew_access_token.html
        // indicates that the response should be as described above.  However, the response received when
        // trying to refresh a non-expired token was "Access Token has been renewed"
        fmt.Println("Keeping the same access token, but it's renewed...")
        http.DisposeHttp()
        jsonToken.DisposeJsonObject()
        resp.DisposeHttpResponse()
        sbRespBody.DisposeStringBuilder()
        return
    }

    hashTab := chilkat.NewHashtable()
    hashTab.AddQueryParams(resp.BodyStr())

    accessToken := hashTab.LookupStr("oauth_token")
    accessTokenSecret := hashTab.LookupStr("oauth_token_secret")

    // The access token + secret is what should be saved and used for
    // subsequent REST API calls.
    fmt.Println("Access Token = ", *accessToken)
    fmt.Println("Access Token Secret = ", *accessTokenSecret)

    // Save this access token for future calls.
    // Just in case we need user_id and screen_name, save those also..
    json := chilkat.NewJsonObject()
    json.AppendString("oauth_token",*accessToken)
    json.AppendString("oauth_token_secret",*accessTokenSecret)

    fac := chilkat.NewFileAccess()
    fac.WriteEntireTextFile("qa_data/tokens/etrade.json",*json.Emit(),"utf-8",false)

    fmt.Println("Success.")

    http.DisposeHttp()
    jsonToken.DisposeJsonObject()
    resp.DisposeHttpResponse()
    sbRespBody.DisposeStringBuilder()
    hashTab.DisposeHashtable()
    json.DisposeJsonObject()
    fac.DisposeFileAccess()