Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.0.0+

ETrade OAuth1 Authorization (3-legged) Step 1

See more ETrade Examples

Demonstrates the first step in 3-legged OAuth1 authorization for the ETrade REST API. This example sends an HTTP request to the "request token URL" to get a request token that begins the OAuth1 process. (See https://apisb.etrade.com/docs/api/authorization/request_token.html )

This example uses the sandbox request token URL. The live request token URL would be "https://api.etrade.com/oauth/request_token".

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    var success: bool = false;

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

    const consumer_key = "ETRADE_CONSUMER_KEY";
    const consumer_secret = "ETRADE_CONSUMER_SECRET";

    // Note: This example uses the sandbox request token URL.
    // The live Get Request Token Request URL is:
    // https://api.etrade.com/oauth/request_token
    // This example will use the Sandbox Token Request URL:
    const request_token_url = "https://apisb.etrade.com/oauth/request_token";

    const http = try chilkat.Http.init();
    defer http.deinit();
    success = true;

    http.setOAuth1(true);
    http.setOAuthConsumerKey(consumer_key);
    http.setOAuthConsumerSecret(consumer_secret);
    http.setOAuthCallback("oob");

    const resp = try chilkat.HttpResponse.init();
    defer resp.deinit();
    http.httpNoBody("GET", request_token_url, resp) catch {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    };

    // If successful, the resp.BodyStr contains something like this:
    // oauth_token=-Wa_KwAAAAAAxfEPAAABV8Qar4Q&oauth_token_secret=OfHY4tZBX2HK4f7yIw76WYdvnl99MVGB&oauth_callback_confirmed=true
    std.debug.print("{s}\n", .{try resp.getBodyStr(alloc)});

    const hash_tab = try chilkat.Hashtable.init();
    defer hash_tab.deinit();
    hash_tab.addQueryParams(try resp.getBodyStr(alloc)) catch {};

    const request_token = try hash_tab.lookupStr(alloc, "oauth_token");
    const request_token_secret = try hash_tab.lookupStr(alloc, "oauth_token_secret");
    http.setOAuthTokenSecret(request_token_secret);

    std.debug.print("oauth_token = {s}\n", .{request_token});
    std.debug.print("oauth_token_secret = {s}\n", .{request_token_secret});

    // Save this request token for the next step..
    const json = try chilkat.JsonObject.init();
    defer json.deinit();
    json.appendString("oauth_token", request_token) catch {};
    json.appendString("oauth_token_secret", request_token_secret) catch {};

    const fac = try chilkat.FileAccess.init();
    defer fac.deinit();
    fac.writeEntireTextFile("qa_data/tokens/etrade_request_token.json", try json.emit(alloc), "utf-8", false) catch {};

    // ---------------------------------------------------------------------------

    // The next step is to form a URL to send to the authorizeUrl
    // This is an HTTP GET that we load into a popup browser.
    const authorize_url = "https://us.etrade.com/e/t/etws/authorize";

    const sb_url_for_browser = try chilkat.StringBuilder.init();
    defer sb_url_for_browser.deinit();
    sb_url_for_browser.append(authorize_url) catch {};
    sb_url_for_browser.append("?key=") catch {};
    sb_url_for_browser.append(consumer_key) catch {};
    sb_url_for_browser.append("&token=") catch {};
    sb_url_for_browser.append(request_token) catch {};
    const url = try sb_url_for_browser.getAsString(alloc);

    // Launch the system's default browser navigated to the URL.
    const oauth2 = try chilkat.OAuth2.init();
    defer oauth2.deinit();
    oauth2.launchBrowser(url) catch {
        std.debug.print("{s}\n", .{try oauth2.getLastErrorText(alloc)});
        return;
    };

    // The ETrade account owner will login and grant access to the application.
    // A short verifier code will be displayed (as shown below), and this must be copy-and-pasted
    // into the next step to Complete the 3-legged OAuth1 Authorization

    // Note: The browser will NOT automatically direct you to the next page.
    // You should copy the verifier code, close the browser, and then paste the verifier
    // code into your application.

    // image
}